From cfe1e5607fe8ad07879d93f982640ae67772ac4e Mon Sep 17 00:00:00 2001 From: waynieack Date: Fri, 18 Nov 2016 06:40:16 -0600 Subject: [PATCH 01/11] Fixed memory leak for TCP write socket --- lib/HARMON.pm | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/HARMON.pm b/lib/HARMON.pm index a2f392d83..31fb0eb3c 100755 --- a/lib/HARMON.pm +++ b/lib/HARMON.pm @@ -926,6 +926,7 @@ sub check_for_data { } if ( $connecttype eq 'tcp' ) { + $main::Socket_Ports{ "$instance" . '_sender' }{data} = undef; if ( $Socket_Items{$instance}{'socket'}->active ) { $NewCmd = uc( From b37e543dd61185eac10ae4c9e5a764ba90fea5bf Mon Sep 17 00:00:00 2001 From: waynieack Date: Thu, 13 Aug 2020 20:48:38 -0500 Subject: [PATCH 02/11] Fixed and completed the Insteon Thermostat functionality --- lib/AoGSmartHome_Items.pm | 120 ++++++++++++++++++++++++++++---------- 1 file changed, 89 insertions(+), 31 deletions(-) diff --git a/lib/AoGSmartHome_Items.pm b/lib/AoGSmartHome_Items.pm index 08221d4c3..c9f549853 100644 --- a/lib/AoGSmartHome_Items.pm +++ b/lib/AoGSmartHome_Items.pm @@ -450,9 +450,9 @@ EOF # the device has the "Brightness" trait. Other types of dimmable # objects will have to be added here (right now we only check for # INSTEON and X10 dimmable lights). + &main::print_log("[AoGSmartHome] Object Name: ". $self->{'uuids'}->{$uuid}->{'realname'} ."\n"); my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); - if ($mh_object->isa('Insteon::DimmableLight') - || $mh_object->can('state_level') ) { + if ( (defined $mh_object) && ($mh_object->isa('Insteon::DimmableLight') || $mh_object->can('state_level')) ) { $response .= <{'uuids'}->{$uuid}->{'realname'}); if (!$mh_object->isa('Insteon::Thermostat') ) { &main::print_log("[AoGSmartHome] '$self->{'uuids'}->{$uuid}->{'realname'} is an unsupported thermostat; ignoring AoG item."); @@ -531,9 +530,9 @@ EOF "name": { "name": "$self->{'uuids'}->{$uuid}->{'name'}" }, - "willReportState": false, + "willReportState": true, "attributes": { - "availableThermostatModes": "off,heat,cool,on", + "availableThermostatModes": "off,heat,cool,on,heatcool,fan-only", "thermostatTemperatureUnit": "F" }, EOF @@ -626,23 +625,43 @@ EOF elsif ( $self->{'uuids'}->{$uuid}->{'type'} eq 'thermostat' ) { my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); if ($mh_object->isa('Insteon::Thermostat') ) { - my $mode = $mh_object->get_mode(); + my $mode = lc($mh_object->get_mode()); + $mode = 'heatcool' if ($mode =~ /auto/); + + my $activeThermostatMode = lc($mh_object->get_status); + my $fanmode = lc($mh_object->get_fan_mode); + if ($activeThermostatMode =~ /cooling/) { + $activeThermostatMode = 'cool'; + } elsif ($activeThermostatMode =~ /heating/) { + $activeThermostatMode = 'heat'; + } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { + $activeThermostatMode = 'fan-only'; + } else { + $activeThermostatMode = 'none'; + } my $temp_setpoint; if ($mode eq 'cool') { - $temp_setpoint = $mh_object->get_cool_sp(); - } else { - $temp_setpoint = $mh_object->get_heat_sp(); + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; + } elsif ($mode eq 'heat') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; + } elsif ($mode eq 'heatcool') { + $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; + $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; } - - my $temp_ambient = $mh_object->get_temp(); - + + my $temp_ambient = &FtoC($mh_object->get_temp); + my $thermostatHumidityAmbient = $mh_object->get_humid; + $response .= <isa('Insteon::Thermostat') ) { + my $mode = lc($mh_object->get_mode); + $mode = 'heatcool' if ($mode =~ /auto/); + if ( $execution_command =~ /TemperatureSetpoint/ ) { - my $setpoint = $command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}; - if ($mh_object->get_mode() eq 'cool') { + &main::print_log("[AoGSmartHome] Setting temp: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}) ) if ( $main::Debug{'aog'} ); + my $setpoint = &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}); + if ( $mode eq 'cool') { $mh_object->cool_setpoint($setpoint); - } else { + } elsif( $mode eq 'heat') { $mh_object->heat_setpoint($setpoint); } + } elsif ( $execution_command =~ /ThermostatTemperatureSetRange/ ) { + &main::print_log("[AoGSmartHome] Setting cool: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'})." Heat: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'})) if ( $main::Debug{'aog'} ); + $mh_object->cool_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'}) ); + $mh_object->heat_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'}) ); } elsif ( $execution_command =~ /ThermostatSetMode/ ) { my $mode = $command->{'execution'}->[0]->{'params'}->{'thermostatMode'}; + $mode = 'auto' if ($mode =~ /heatcool/); $mh_object->mode($mode); } - my $mode = $mh_object->get_mode(); - - my $temp_setpoint; - if ($mode eq 'cool') { - $temp_setpoint = $mh_object->get_cool_sp(); - } else { - $temp_setpoint = $mh_object->get_heat_sp(); - } - - my $temp_ambient = $mh_object->get_temp(); + $mode = lc($mh_object->get_mode); + $mode = 'heatcool' if ($mode =~ /auto/); + my $activeThermostatMode = lc($mh_object->get_status()); + my $fanmode = lc($mh_object->get_fan_mode); + if ($activeThermostatMode =~ /cooling/) { + $activeThermostatMode = 'cool'; + } elsif ($activeThermostatMode =~ /heating/) { + $activeThermostatMode = 'heat'; + } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { + $activeThermostatMode = 'fan-only'; + } else { + $activeThermostatMode = 'none'; + } + + my $temp_setpoint; + if ($mode eq 'cool') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; + } elsif ($mode eq 'heat') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; + } elsif ($mode eq 'heatcool') { + $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; + $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; + } + + my $temp_ambient = &FtoC($mh_object->get_temp); + my $thermostatHumidityAmbient = $mh_object->get_humid; $response .= " {"; $response .= < Date: Tue, 3 Nov 2020 20:34:45 -0600 Subject: [PATCH 03/11] Added alexaForceLongFormat ini option to force the long format discovery response to resolve some discovery issues. --- lib/AlexaBridge.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/AlexaBridge.pm b/lib/AlexaBridge.pm index 1b0b15ae8..a9985879b 100644 --- a/lib/AlexaBridge.pm +++ b/lib/AlexaBridge.pm @@ -861,7 +861,7 @@ sub process_http { next unless $name; my $state = &get_set_state( $self, $AlexaObjects, $uuid, 'get' ); $statep1 = qq[{"]; - if ( $Http{'Accept-Encoding'} =~ m/gzip/ ) { + if ( ( $Http{'Accept-Encoding'} =~ m/gzip/ ) or ( $::config_parms{'alexaForceLongFormat'} ) ) { &main::print_log("[Alexa] Debug: Returning long format. Accept-Encoding=" . $Http{'Accept-Encoding'}) if $main::Debug{'alexa'}; $statep2=qq[":{"state":{$state,"alert": "select","mode": "homeautomation","reachable": true},"swupdate": {"state": "readytoinstall","lastinstall": null},"type": "Dimmable light","name": "]; $statep3=qq[","modelid": "LWB014","manufacturername": "Philips","productname": "Hue white lamp","capabilities": {"certified": true,"control": {"mindimlevel": 5000,"maxlumen": 840},"streaming": {"renderer": false,"proxy": false}},"config": {"archetype": "classicbulb","function": "functional","direction": "omnidirectional"},"uniqueid": "00:17:88:01:04:00:3d:96-0b","swversion": "1.23.0_r20156","swconfigid": "321D79EA","productid": "Philips-LWB014-1-A19DLv4"}]; From e82247b8757ab0817edf81bc0dd7c68beac6e48d Mon Sep 17 00:00:00 2001 From: waynieack Date: Wed, 16 Dec 2020 21:28:35 -0600 Subject: [PATCH 04/11] Added more logging and fixed some code that would crash if misconfigured --- lib/AoGSmartHome_Items.pm | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/AoGSmartHome_Items.pm b/lib/AoGSmartHome_Items.pm index c9f549853..b2cf110ef 100644 --- a/lib/AoGSmartHome_Items.pm +++ b/lib/AoGSmartHome_Items.pm @@ -241,6 +241,7 @@ sub set_state { } elsif ( ref $sub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; print STDERR "[AoGSmartHome] Debug: running sub $sub(set, $state)\n" if $main::Debug{'aog'}; @@ -253,6 +254,7 @@ sub set_state { # my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ( ($mh_object->isa('Insteon::DimmableLight') @@ -291,6 +293,7 @@ sub get_state { } elsif ( ref $statesub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $debug = "[AoGSmartHome] Debug: get_state() running sub: $statesub('$realname') - "; @@ -304,6 +307,7 @@ sub get_state { # my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $cstate = $mh_object->$statesub(); @@ -452,6 +456,9 @@ EOF # INSTEON and X10 dimmable lights). &main::print_log("[AoGSmartHome] Object Name: ". $self->{'uuids'}->{$uuid}->{'realname'} ."\n"); my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if ( (defined $mh_object) && ($mh_object->isa('Insteon::DimmableLight') || $mh_object->can('state_level')) ) { $response .= <{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if (!$mh_object->isa('Insteon::Thermostat') ) { &main::print_log("[AoGSmartHome] '$self->{'uuids'}->{$uuid}->{'realname'} is an unsupported thermostat; ignoring AoG item."); next; @@ -624,6 +634,9 @@ EOF } elsif ( $self->{'uuids'}->{$uuid}->{'type'} eq 'thermostat' ) { my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if ($mh_object->isa('Insteon::Thermostat') ) { my $mode = lc($mh_object->get_mode()); $mode = 'heatcool' if ($mode =~ /auto/); @@ -701,6 +714,8 @@ EOF # If the device is dimmable we provided the "Brightness" trait, so we # have to supply the "brightness" state. my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; if ($mh_object->isa('Insteon::DimmableLight') || $mh_object->can('state_level') ) { @@ -840,6 +855,7 @@ sub execute_ThermostatX { my $realname = $self->{'uuids'}->{$device->{'id'} }->{'realname'}; my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ($mh_object->isa('Insteon::Thermostat') ) { From e125bce962e4113b7eced72cfc9fe8e323e929f0 Mon Sep 17 00:00:00 2001 From: waynieack Date: Wed, 16 Dec 2020 21:41:35 -0600 Subject: [PATCH 05/11] removed collections.json from the push --- data/web/collections.json | 1238 +++++++++++++++++++------------------ 1 file changed, 622 insertions(+), 616 deletions(-) diff --git a/data/web/collections.json b/data/web/collections.json index e8a21760a..6b0bef1f2 100644 --- a/data/web/collections.json +++ b/data/web/collections.json @@ -1,215 +1,179 @@ { - "113" : { - "link" : "/clock/index.html", - "icon" : "fa-clock-o", - "name" : "LED Clock" - }, - "69" : { - "mode" : "advanced", - "link" : "/ia5/security/webcam.shtml", - "name" : "Windowed Overview", - "icon" : "fa-th-large" + "59" : { + "name" : "Weather.com - Local", + "icon" : "fa-cloud", + "iframe" : "http://www.weather.com/weather/local/91403" }, - "11" : { - "name" : "Events, Calendar, & Clock", + "9" : { + "icon" : "fa-microphone", + "name" : "Speech", "children" : [ - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 113, - 115, - 112, - 114 - ], - "icon" : "fa-calendar" - }, - "29" : { - "icon" : "fa-globe", - "name" : "List Global Variables", - "link" : "/ia7/#path=/vars_global" + 97, + 98, + 100, + 99 + ] }, - "73" : { - "link" : "/ia5/security/backyardcam.shtml", - "icon" : "fa-pagelines", - "name" : "Backyard Camera" + "56" : { + "name" : "Browse Appliances", + "icon" : "fa-sitemap", + "link" : "/ia7/#path=/objects&parents=Appliances" }, - "116" : { - "link" : "/bin/weather_graph_zoom.pl", - "icon" : "fa-search", - "name" : "Weather Zoom" + "114" : { + "icon" : "fa-exclamation-circle", + "mode" : "advanced", + "name" : "Browse Timers", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timers" }, - "94" : { - "link" : "/ia5/entertain/internetradio.shtml", - "name" : "Internet Radio", - "icon" : "fa-sitemap" + "91" : { + "link" : "/ia5/entertain/shortcuts.shtml", + "icon" : "fa-bookmark-o", + "name" : "TV Shortcuts" }, - "7" : { - "children" : [ - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85 - ], - "name" : "Phone Calls & VoiceMail Msgs", - "icon" : "fa-phone" + "46" : { + "icon" : "fa-inbox", + "name" : "Postal Mailbox", + "link" : "/ia5/news/postalmail.shtml" }, - "19" : { - "icon" : "fa-gears", - "mode" : "advanced", - "name" : "Browse Widgets", + "8" : { + "icon" : "fa-music", + "name" : "TV/Radio Guide & MP3 Music", "children" : [ - 31, - 32, - 33, - 34, - 35 + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96 ] }, - "40" : { - "link" : "/ia5/statistics/webstats.shtml", - "icon" : "fa-link", - "mode" : "advanced", - "name" : "WebServer Statistics" - }, - "79" : { - "link" : "/bin/phone_search.pl", - "icon" : "fa-search", - "name" : "Search Calls" + "121" : { + "link" : "/ia7/#path=/rrd?now-6hour?wind_speed", + "icon" : "wi-strong-wind", + "name" : "Wind Speed" }, - "92" : { - "external" : "http://www.google.com/search?&q=movie%3A+91403", - "icon" : "fa-film", - "name" : "Local Movies" + "104" : { + "name" : "Browse Entertainment", + "icon" : "fa-gamepad", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment" }, - "42" : { - "name" : "Browse This Category", - "icon" : "fa-ellipsis-v", - "mode" : "advanced", - "link" : "/ia7/widgets_checkbox" + "74" : { + "icon" : "fa-desktop", + "name" : "Desktop Camera", + "link" : "/ia5/security/desktopcam.shtml" }, - "41" : { - "name" : "HouseServer Statistics", - "icon" : "fa-home", - "mode" : "advanced", - "link" : "/ia5/statistics/housestats.shtml" + "75" : { + "link" : "/ia7/#path=/floorplan?Sample_Floorplan", + "icon" : "fa-building-o", + "name" : "Floorplan View" }, - "600" : { - "name" : "Status", - "link" : "/ia7/#path=/objects&parents=ia7_status_items" + "80" : { + "icon" : "fa-list", + "name" : "Phone List", + "link" : "/bin/phone_list.pl" }, "89" : { "name" : "TV Guide", - "icon" : "fa-book", - "external" : "http://tvguide.com/Listings/index.asp?I=70620&Zip=91403" + "external" : "http://tvguide.com/Listings/index.asp?I=70620&Zip=91403", + "icon" : "fa-book" }, - "34" : { - "link" : "/ia7/widgets_radiobutton", - "mode" : "advanced", - "icon" : "fa-dot-circle-o", - "name" : "Radiobutton Widgets" + "120" : { + "link" : "/ia7/#path=/rrd?now-6hour?indoor_humid", + "name" : "Indoor Humidity", + "icon" : "wi-humidity" }, - "63" : { - "icon" : "fa-moon-o", - "name" : "Sun & Moon Data", - "link" : "/ia5/outside/sunmoon.shtml" + "62" : { + "link" : "/ia7/#path=/objects&parents=HVAC", + "name" : "HVAC", + "icon" : "fa-dashboard" }, - "109" : { - "icon" : "fa-shopping-cart", - "name" : "Shopping List", - "link" : "/bin/shopping_list.pl" + "77" : { + "name" : "Recent Incoming Calls", + "icon" : "fa-arrow-down", + "link" : "/bin/phone_in.pl" }, - "124" : { - "link" : "/ia7/#path=/rrd?now-6hour?rain_rate", + "119" : { "icon" : "wi-sprinkle", - "name" : "Rain Rate" + "name" : "Outdoor Humidity", + "link" : "/ia7/#path=/rrd?now-6hour?outdoor_humid" }, - "meta" : { - "version" : "1.4" + "700" : { + "user" : "$Authorized" }, - "4" : { - "icon" : "fa-lightbulb-o", - "name" : "Lights & Appliances", - "children" : [ - 51, - 52, - 53, - 54, - 55, - 56, - 57 - ] + "67" : { + "link" : "/ia5/outside/browse.shtml", + "name" : "Browse Category", + "icon" : "fa-archive" }, - "44" : { - "name" : "Read CNN", - "icon" : "fa-book", - "external" : "http://www.cnn.com" + "60" : { + "name" : "Weather.com - National", + "external" : "http://www.weather.com/maps/maptype/currentweatherusnational/index_large.html", + "icon" : "fa-globe" }, - "30" : { - "link" : "/ia7/#path=/vars_save", - "icon" : "fa-save", - "name" : "List Save Variables" + "49" : { + "link" : "/bin/menu.pl", + "mode" : "advanced", + "icon" : "fa-list-alt", + "name" : "Menu Control" }, - "81" : { - "link" : "/ia5/phone/voicemail.shtml", - "icon" : "fa-envelope-o", - "name" : "VoiceMail Messages" + "36" : { + "name" : "View Print Log", + "icon" : "fa-list", + "link" : "/ia7/#path=/print_log" }, - "121" : { - "link" : "/ia7/#path=/rrd?now-6hour?wind_speed", - "name" : "Wind Speed", - "icon" : "wi-strong-wind" + "99" : { + "link" : "/ia5/speak/speechsettings.shtml", + "mode" : "advanced", + "icon" : "fa-cog", + "name" : "Speech Settings" }, - "78" : { - "name" : "Recent Outgoing Calls", - "icon" : "fa-arrow-up", - "link" : "/bin/phone_out.pl" + "45" : { + "name" : "Newsgroups", + "external" : "http://groups.google.com/grphp", + "icon" : "fa-group" }, - "53" : { - "link" : "/ia7/#path=objects&type=X10_Appliance", - "icon" : "fa-sitemap", - "name" : "Control X10 Appliances" + "90" : { + "external" : "http://tvguide.com/tv", + "name" : "What's On Now", + "icon" : "fa-desktop" }, - "28" : { - "icon" : "fa-desktop", - "mode" : "advanced", - "name" : "Setup TV Provider", - "link" : "/bin/set_parm_tv_provider.pl" + "86" : { + "name" : "MP3 Jukebox", + "icon" : "fa-music", + "link" : "/misc/mp3.html" }, - "119" : { - "name" : "Outdoor Humidity", - "icon" : "wi-sprinkle", - "link" : "/ia7/#path=/rrd?now-6hour?outdoor_humid" + "73" : { + "link" : "/ia5/security/backyardcam.shtml", + "name" : "Backyard Camera", + "icon" : "fa-pagelines" }, - "50" : { - "name" : "Browse Modes", - "icon" : "fa-th", - "link" : "/ia5/modes/browse.shtml" + "88" : { + "link" : "/tv", + "icon" : "fa-calendar-o", + "name" : "TV Today" }, - "60" : { - "icon" : "fa-globe", - "name" : "Weather.com - National", - "external" : "http://www.weather.com/maps/maptype/currentweatherusnational/index_large.html" + "83" : { + "name" : "White Pages", + "external" : "http://www.whitepages.com/", + "icon" : "fa-home" }, - "118" : { - "icon" : "wi-thermometer", - "name" : "Indoor Temp", - "link" : "/ia7/#path=/rrd?now-6hour?indoor_temp" + "98" : { + "icon" : "fa-volume-up", + "name" : "Speak Text", + "link" : "/ia7/house/speaktext.shtml" }, - "77" : { - "icon" : "fa-arrow-down", - "name" : "Recent Incoming Calls", - "link" : "/bin/phone_in.pl" + "96" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Music", + "name" : "Browse Music", + "icon" : "fa-headphones" }, "20" : { + "icon" : "fa-wrench", "name" : "Setup MrHouse", "children" : [ 21, @@ -219,197 +183,214 @@ 25, 26, 27, - 28 - ], - "icon" : "fa-wrench" - }, - "114" : { - "icon" : "fa-exclamation-circle", - "name" : "Browse Timers", - "mode" : "advanced", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timers" + 28, + "126" + ] }, - "64" : { - "link" : "/ia5/outside/earthquakes.shtml", - "name" : "Earthquakes", - "icon" : "fa-bullseye" + "115" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timed_Events", + "name" : "Browse Timed_Events", + "icon" : "fa-archive" }, - "104" : { - "name" : "Browse Entertainment", - "icon" : "fa-gamepad", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment" - }, - "38" : { - "icon" : "fa-warning", - "name" : "View Error Log", - "link" : "/ia5/statistics/errorlog.shtml" - }, - "46" : { - "link" : "/ia5/news/postalmail.shtml", - "name" : "Postal Mailbox", - "icon" : "fa-inbox" - }, - "112" : { - "name" : "Timers", - "icon" : "fa-exclamation", - "mode" : "advanced", - "link" : "/misc/timers.shtml" - }, - "12" : { - "icon" : "fa-bar-chart-o", + "6" : { "children" : [ - 36, - 37, - 38, - 39, - 40, - 41, - 42 + 68, + 70, + 72, + 73, + 74, + 75, + 76, + 69, + 71 ], - "name" : "Statistics & Logged Data" + "icon" : "fa-video-camera", + "name" : "Security Cameras" }, - "93" : { - "external" : "http://realguide.real.com/", - "name" : "Radio Guide", - "icon" : "fa-signal" + "42" : { + "icon" : "fa-ellipsis-v", + "mode" : "advanced", + "name" : "Browse This Category", + "link" : "/ia7/widgets_checkbox" }, - "17" : { - "link" : "/ia7/#path=objects&type=Group", - "icon" : "fa-group", - "name" : "Browse Groups" + "102" : { + "icon" : "fa-desktop", + "external" : "$config_parms{html_dir}/misc/photos.shtml", + "name" : "Picture Frame" }, "22" : { "name" : "User Code Activation", "icon" : "fa-code", "link" : "/bin/code_unselect.pl" }, - "99" : { - "name" : "Speech Settings", - "mode" : "advanced", - "icon" : "fa-cog", - "link" : "/ia5/speak/speechsettings.shtml" + "47" : { + "link" : "/ia5/news/browse.shtml", + "name" : "Browse News", + "icon" : "fa-list-alt" }, - "3" : { - "name" : "Modes", - "children" : [ - 48, - 50, - 49 - ], - "icon" : "fa-tasks" + "25" : { + "name" : "INI Editor", + "icon" : "fa-table", + "link" : "/bin/iniedit.pl" }, - "85" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Phone", - "name" : "Browse Phone", - "icon" : "fa-archive" + "50" : { + "link" : "/ia5/modes/browse.shtml", + "icon" : "fa-th", + "name" : "Browse Modes" }, - "700" : { - "user" : "$Authorized" + "10" : { + "children" : [ + 101, + 102, + 103, + 104 + ], + "name" : "Comics & Pictures", + "icon" : "fa-picture-o" }, - "82" : { - "external" : "http://www.yellowpages.com/", - "name" : "Yellow Pages", - "icon" : "fa-building-o" + "92" : { + "icon" : "fa-film", + "external" : "http://www.google.com/search?&q=movie%3A+91403", + "name" : "Local Movies" }, - "75" : { - "link" : "/ia7/#path=/floorplan?Sample_Floorplan", - "icon" : "fa-building-o", - "name" : "Floorplan View" + "30" : { + "link" : "/ia7/#path=/vars_save", + "icon" : "fa-save", + "name" : "List Save Variables" }, - "115" : { - "icon" : "fa-archive", - "name" : "Browse Timed_Events", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timed_Events" + "meta" : { + "version" : "1.6" }, - "27" : { - "link" : "/bin/headercontrol.pl", - "icon" : "fa-wrench", + "65" : { + "icon" : "fa-fire", "mode" : "advanced", - "name" : "Header Control" + "name" : "Iridium Flares", + "link" : "/ia5/outside/sattelite.shtml" }, - "59" : { - "iframe" : "http://www.weather.com/weather/local/91403", - "icon" : "fa-cloud", - "name" : "Weather.com - Local" + "17" : { + "link" : "/ia7/#path=objects&type=Group", + "icon" : "fa-group", + "name" : "Browse Groups" }, - "102" : { - "icon" : "fa-desktop", - "name" : "Picture Frame", - "external" : "$config_parms{html_dir}/misc/photos.shtml" + "26" : { + "name" : "Program IRMAN", + "mode" : "advanced", + "icon" : "fa-rss", + "link" : "/ia5/house/irman.shtml" }, - "100" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Speech", - "icon" : "fa-microphone", - "name" : "Browse Speech" + "81" : { + "icon" : "fa-envelope-o", + "name" : "VoiceMail Messages", + "link" : "/ia5/phone/voicemail.shtml" }, - "55" : { - "link" : "/ia7/#path=/objects&parents=All_Lights", - "name" : "Browse All Lights", - "icon" : "fa-lightbulb-o" + "71" : { + "link" : "/cameras/", + "icon" : "fa-film", + "mode" : "advanced", + "name" : "Camera Files" }, - "70" : { - "icon" : "fa-clock-o", - "name" : "Time Lapse Viewer", - "link" : "/ia5/security/wc_sshow.shtml" + "35" : { + "link" : "/ia7/widgets_checkbox", + "icon" : "fa-check-square-o", + "name" : "Checkbox Widgets" }, - "500" : { + "3" : { "children" : [ - 700 + 48, + 50, + 49 ], - "name" : "Gear Settings", - "icon" : "fa-home" - }, - "37" : { - "icon" : "fa-bullhorn", - "name" : "View Speech Log", - "link" : "/ia7/#path=/print_speaklog" + "name" : "Modes", + "icon" : "fa-tasks" }, "68" : { + "link" : "/ia5/security/main.shtml", "name" : "Basic Overview", - "icon" : "fa-video-camera", - "link" : "/ia5/security/main.shtml" + "icon" : "fa-video-camera" + }, + "64" : { + "link" : "/ia5/outside/earthquakes.shtml", + "name" : "Earthquakes", + "icon" : "fa-bullseye" }, "72" : { - "icon" : "fa-home", + "link" : "/ia5/security/frontdoor.shtml", "name" : "Frontdoor Camera", - "link" : "/ia5/security/frontdoor.shtml" + "icon" : "fa-home" }, - "26" : { - "mode" : "advanced", - "icon" : "fa-rss", - "name" : "Program IRMAN", - "link" : "/ia5/house/irman.shtml" + "1" : { + "children" : [ + 13, + 15, + 16, + 17, + 18, + 20, + 29, + 30, + 19 + ], + "icon" : "fa-home", + "name" : "Mr. House Home" }, - "16" : { - "icon" : "fa-archive", - "name" : "Browse Categories", - "link" : "/ia7/#path=/objects&type=Category" + "79" : { + "name" : "Search Calls", + "icon" : "fa-search", + "link" : "/bin/phone_search.pl" }, - "83" : { - "name" : "White Pages", - "icon" : "fa-home", - "external" : "http://www.whitepages.com/" + "61" : { + "children" : [ + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125 + ], + "name" : "Weather Station", + "icon" : "fa-bolt" }, - "107" : { - "link" : "/organizer/contacts.pl", - "name" : "Address Book", - "keys" : "true", - "icon" : "fa-book" + "106" : { + "icon" : "fa-calendar", + "name" : "Calendar", + "link" : "/organizer/calendar.pl", + "keys" : "true" }, - "110" : { - "name" : "List Manager", - "icon" : "fa-list-alt", - "link" : "/bin/ListManager.pl" + "101" : { + "name" : "Daily Comics", + "icon" : "fa-picture-o", + "link" : "/comics/index.html" }, - "125" : { - "name" : "Baro Pressure", - "icon" : "wi-cloud-refresh", - "link" : "/ia7/#path=/rrd?now-6hour?outside_press" + "78" : { + "link" : "/bin/phone_out.pl", + "name" : "Recent Outgoing Calls", + "icon" : "fa-arrow-up" }, - "80" : { - "link" : "/bin/phone_list.pl", - "name" : "Phone List", - "icon" : "fa-list" + "116" : { + "name" : "Weather Zoom", + "icon" : "fa-search", + "link" : "/bin/weather_graph_zoom.pl" + }, + "48" : { + "icon" : "fa-tasks", + "name" : "Control Modes & Events", + "link" : "/ia7/house/modes.shtml" + }, + "41" : { + "link" : "/ia5/statistics/housestats.shtml", + "name" : "HouseServer Statistics", + "mode" : "advanced", + "icon" : "fa-home" + }, + "69" : { + "name" : "Windowed Overview", + "mode" : "advanced", + "icon" : "fa-th-large", + "link" : "/ia5/security/webcam.shtml" }, "5" : { "children" : [ @@ -424,381 +405,406 @@ 65, 66 ], - "name" : "HVAC & Weather", - "icon" : "fa-umbrella" + "icon" : "fa-umbrella", + "name" : "HVAC & Weather" }, - "15" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=MisterHouse", - "icon" : "fa-home", - "name" : "Browse MrHouse" - }, - "120" : { - "name" : "Indoor Humidity", - "icon" : "wi-humidity", - "link" : "/ia7/#path=/rrd?now-6hour?indoor_humid" + "28" : { + "link" : "/bin/set_parm_tv_provider.pl", + "name" : "Setup TV Provider", + "icon" : "fa-desktop", + "mode" : "advanced" }, - "91" : { - "name" : "TV Shortcuts", - "icon" : "fa-bookmark-o", - "link" : "/ia5/entertain/shortcuts.shtml" + "29" : { + "name" : "List Global Variables", + "icon" : "fa-globe", + "link" : "/ia7/#path=/vars_global" }, - "13" : { - "link" : "/ia7/house/main.shtml", - "name" : "About MrHouse", - "icon" : "fa-home" + "97" : { + "link" : "/ia7/#path=/print_speaklog", + "name" : "View Speech Log", + "icon" : "fa-bullhorn" }, - "57" : { - "link" : "/ia7/#path=/floorplan?Sample_Floorplan", - "name" : "Floorplan View", - "icon" : "fa-home" + "44" : { + "external" : "http://www.cnn.com", + "name" : "Read CNN", + "icon" : "fa-book" }, - "108" : { - "link" : "/organizer/tasks.pl", - "name" : "TODO List", - "keys" : "true", - "icon" : "fa-list" + "15" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=MisterHouse", + "name" : "Browse MrHouse", + "icon" : "fa-home" }, - "105" : { - "icon" : "fa-check", - "name" : "Calendar Facts", - "link" : "/ia5/calendar/main.shtml" + "113" : { + "icon" : "fa-clock-o", + "name" : "LED Clock", + "link" : "/clock/index.html" }, - "117" : { - "icon" : "fa-leaf", - "name" : "Outdoor Temp", - "link" : "/ia7/#path=/rrd?now-6hour?outdoor_temp" + "63" : { + "link" : "/ia5/outside/sunmoon.shtml", + "name" : "Sun & Moon Data", + "icon" : "fa-moon-o" }, - "98" : { - "icon" : "fa-volume-up", - "name" : "Speak Text", - "link" : "/ia7/house/speaktext.shtml" + "107" : { + "keys" : "true", + "icon" : "fa-book", + "name" : "Address Book", + "link" : "/organizer/contacts.pl" }, - "97" : { - "link" : "/ia7/#path=/print_speaklog", - "name" : "View Speech Log", - "icon" : "fa-bullhorn" + "34" : { + "name" : "Radiobutton Widgets", + "mode" : "advanced", + "icon" : "fa-dot-circle-o", + "link" : "/ia7/widgets_radiobutton" }, - "61" : { - "children" : [ - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125 - ], - "name" : "Weather Station", - "icon" : "fa-bolt" + "125" : { + "name" : "Baro Pressure", + "icon" : "wi-cloud-refresh", + "link" : "/ia7/#path=/rrd?now-6hour?outside_press" }, - "51" : { - "icon" : "fa-group", - "name" : "Browse Groups", - "link" : "/ia7/#path=/objects&type=Group" + "118" : { + "icon" : "wi-thermometer", + "name" : "Indoor Temp", + "link" : "/ia7/#path=/rrd?now-6hour?indoor_temp" }, - "14" : { - "link" : "/ia7/house/aboutaudrey.shtml", - "name" : "About 3Com Audrey", - "icon" : "fa-desktop" + "52" : { + "link" : "/ia7/#path=objects&type=X10_Item", + "icon" : "fa-info", + "name" : "Control X10 Items" }, "31" : { "link" : "/ia7/widgets", "icon" : "fa-cogs", "name" : "All Widgets" }, - "56" : { - "link" : "/ia7/#path=/objects&parents=Appliances", - "icon" : "fa-sitemap", - "name" : "Browse Appliances" - }, - "6" : { - "icon" : "fa-video-camera", - "name" : "Security Cameras", - "children" : [ - 68, - 70, - 72, - 73, - 74, - 75, - 76, - 69, - 71 - ] - }, - "84" : { - "icon" : "fa-sort-alpha-desc", - "name" : "Reverse Lookup", - "external" : "http://www.whitepages.com/find_person.pl?fid=p" - }, - "74" : { - "link" : "/ia5/security/desktopcam.shtml", - "name" : "Desktop Camera", - "icon" : "fa-desktop" - }, - "33" : { - "link" : "/ia7/widgets_entry", - "icon" : "fa-pencil-square-o", - "name" : "Entry Widgets" + "14" : { + "icon" : "fa-desktop", + "name" : "About 3Com Audrey", + "link" : "/ia7/house/aboutaudrey.shtml" }, - "103" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Photos", - "icon" : "fa-archive", - "name" : "Browse Photos" + "70" : { + "icon" : "fa-clock-o", + "name" : "Time Lapse Viewer", + "link" : "/ia5/security/wc_sshow.shtml" }, - "65" : { - "icon" : "fa-fire", - "name" : "Iridium Flares", + "40" : { + "link" : "/ia5/statistics/webstats.shtml", + "name" : "WebServer Statistics", "mode" : "advanced", - "link" : "/ia5/outside/sattelite.shtml" + "icon" : "fa-link" }, - "35" : { - "link" : "/ia7/widgets_checkbox", - "icon" : "fa-check-square-o", - "name" : "Checkbox Widgets" + "117" : { + "link" : "/ia7/#path=/rrd?now-6hour?outdoor_temp", + "name" : "Outdoor Temp", + "icon" : "fa-leaf" }, - "0" : { - "name" : "Home", - "children" : [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "icon" : "fa-home" + "51" : { + "icon" : "fa-group", + "name" : "Browse Groups", + "link" : "/ia7/#path=/objects&type=Group" }, - "86" : { - "icon" : "fa-music", - "name" : "MP3 Jukebox", - "link" : "/misc/mp3.html" + "123" : { + "link" : "/ia7/#path=/rrd?now-6hour?rain", + "icon" : "wi-rain", + "name" : "Total Rain" }, - "43" : { - "link" : "/ia5/news/main.shtml", - "name" : "Read e-mail", - "icon" : "fa-envelope" + "55" : { + "link" : "/ia7/#path=/objects&parents=All_Lights", + "name" : "Browse All Lights", + "icon" : "fa-lightbulb-o" }, - "88" : { - "link" : "/tv", - "icon" : "fa-calendar-o", - "name" : "TV Today" + "126" : { + "link" : "/ia7/#path=/security", + "icon" : "fa-users", + "name" : "Users and Groups" }, - "36" : { - "icon" : "fa-list", - "name" : "View Print Log", - "link" : "/ia7/#path=/print_log" + "112" : { + "name" : "Timers", + "icon" : "fa-exclamation", + "mode" : "advanced", + "link" : "/misc/timers.shtml" }, - "24" : { - "name" : "Edit Items", - "icon" : "fa-list", - "link" : "/bin/items.pl" + "600" : { + "link" : "/ia7/#path=/objects&parents=ia7_status_items", + "name" : "Status" }, - "123" : { - "link" : "/ia7/#path=/rrd?now-6hour?rain", - "name" : "Total Rain", - "icon" : "wi-rain" + "109" : { + "icon" : "fa-shopping-cart", + "name" : "Shopping List", + "link" : "/bin/shopping_list.pl" }, - "48" : { - "name" : "Control Modes & Events", - "icon" : "fa-tasks", - "link" : "/ia7/house/modes.shtml" + "58" : { + "name" : "Weather Underground", + "icon" : "fa-sun-o", + "iframe" : "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=91403" }, "87" : { "icon" : "fa-play-circle", "name" : "Media Center", "link" : "/media/mhmedia.html" }, - "9" : { - "name" : "Speech", - "children" : [ - 97, - 98, - 100, - 99 - ], - "icon" : "fa-microphone" + "18" : { + "link" : "/ia7/#path=/objects&type=Type", + "icon" : "fa-info", + "name" : "Browse Items" }, - "66" : { - "name" : "GPS/APRS Tracking", + "76" : { + "link" : "/ia5/security/floorplan.shtml", + "name" : "Floorplan View2", "mode" : "advanced", - "icon" : "fa-road", - "link" : "/ia5/outside/tracking.shtml" + "icon" : "fa-building-o" }, "95" : { "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment", "icon" : "fa-gamepad", "name" : "Browse Entertainment" }, - "106" : { - "link" : "/organizer/calendar.pl", - "keys" : "true", - "name" : "Calendar", - "icon" : "fa-calendar" + "21" : { + "link" : "/bin/code_select.pl", + "name" : "Common Code Activation", + "icon" : "fa-code" }, - "58" : { - "name" : "Weather Underground", - "iframe" : "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=91403", - "icon" : "fa-sun-o" + "124" : { + "icon" : "wi-sprinkle", + "name" : "Rain Rate", + "link" : "/ia7/#path=/rrd?now-6hour?rain_rate" }, - "67" : { - "link" : "/ia5/outside/browse.shtml", - "icon" : "fa-archive", - "name" : "Browse Category" + "27" : { + "link" : "/bin/headercontrol.pl", + "name" : "Header Control", + "mode" : "advanced", + "icon" : "fa-wrench" }, - "49" : { + "23" : { + "icon" : "fa-clock-o", + "name" : "Edit Triggers", + "link" : "/ia7/#path=triggers" + }, + "94" : { + "link" : "/ia5/entertain/internetradio.shtml", + "icon" : "fa-sitemap", + "name" : "Internet Radio" + }, + "38" : { + "link" : "/ia5/statistics/errorlog.shtml", + "name" : "View Error Log", + "icon" : "fa-warning" + }, + "110" : { + "link" : "/bin/ListManager.pl", "icon" : "fa-list-alt", + "name" : "List Manager" + }, + "19" : { + "children" : [ + 31, + 32, + 33, + 34, + 35 + ], "mode" : "advanced", - "name" : "Menu Control", - "link" : "/bin/menu.pl" + "icon" : "fa-gears", + "name" : "Browse Widgets" }, - "71" : { - "link" : "/cameras/", - "name" : "Camera Files", + "82" : { + "icon" : "fa-building-o", + "external" : "http://www.yellowpages.com/", + "name" : "Yellow Pages" + }, + "66" : { + "icon" : "fa-road", "mode" : "advanced", - "icon" : "fa-film" + "name" : "GPS/APRS Tracking", + "link" : "/ia5/outside/tracking.shtml" }, - "18" : { - "icon" : "fa-info", - "name" : "Browse Items", - "link" : "/ia7/#path=/objects&type=Type" + "100" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Speech", + "name" : "Browse Speech", + "icon" : "fa-microphone" }, - "8" : { - "icon" : "fa-music", - "children" : [ - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96 - ], - "name" : "TV/Radio Guide & MP3 Music" + "16" : { + "name" : "Browse Categories", + "icon" : "fa-archive", + "link" : "/ia7/#path=/objects&type=Category" }, - "23" : { - "icon" : "fa-clock-o", - "name" : "Edit Triggers", - "link" : "/bin/triggers.pl" + "105" : { + "link" : "/ia5/calendar/main.shtml", + "icon" : "fa-check", + "name" : "Calendar Facts" }, - "47" : { - "link" : "/ia5/news/browse.shtml", - "icon" : "fa-list-alt", - "name" : "Browse News" + "85" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Phone", + "icon" : "fa-archive", + "name" : "Browse Phone" + }, + "39" : { + "name" : "View Backup Log", + "icon" : "fa-floppy-o", + "link" : "/ia5/statistics/backuplog.shtml" + }, + "57" : { + "icon" : "fa-home", + "name" : "Floorplan View", + "link" : "/ia7/#path=/floorplan?Sample_Floorplan" }, "32" : { "link" : "/ia7/widgets_label", "name" : "Label Widgets", "icon" : "fa-square-o" }, - "1" : { - "icon" : "fa-home", + "93" : { + "icon" : "fa-signal", + "external" : "http://realguide.real.com/", + "name" : "Radio Guide" + }, + "12" : { "children" : [ - 13, - 15, - 16, - 17, - 18, - 20, - 29, - 30, - 19 + 36, + 37, + 38, + 39, + 40, + 41, + 42 ], - "name" : "Mr. House Home" + "name" : "Statistics & Logged Data", + "icon" : "fa-bar-chart-o" }, - "52" : { - "icon" : "fa-info", - "name" : "Control X10 Items", - "link" : "/ia7/#path=objects&type=X10_Item" + "122" : { + "link" : "/ia7/#path=/rrd?now-6hour?wind_dir", + "icon" : "fa-arrows", + "name" : "Wind Direction" }, - "90" : { - "external" : "http://tvguide.com/tv", - "name" : "What's On Now", - "icon" : "fa-desktop" + "33" : { + "name" : "Entry Widgets", + "icon" : "fa-pencil-square-o", + "link" : "/ia7/widgets_entry" }, - "96" : { - "name" : "Browse Music", - "icon" : "fa-headphones", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Music" + "108" : { + "name" : "TODO List", + "icon" : "fa-list", + "link" : "/organizer/tasks.pl", + "keys" : "true" }, - "25" : { - "icon" : "fa-table", - "name" : "INI Editor", - "link" : "/bin/iniedit.pl" + "24" : { + "link" : "/bin/items.pl", + "name" : "Edit Items", + "icon" : "fa-list" }, - "45" : { - "external" : "http://groups.google.com/grphp", - "icon" : "fa-group", - "name" : "Newsgroups" + "53" : { + "link" : "/ia7/#path=objects&type=X10_Appliance", + "icon" : "fa-sitemap", + "name" : "Control X10 Appliances" }, "111" : { - "link" : "/bin/triggers.pl", + "link" : "/ia7/#path=triggers", "name" : "Alarms", "icon" : "fa-bell-o" }, - "2" : { - "icon" : "fa-envelope", + "4" : { "children" : [ - 43, - 44, - 45, - 46, - 47 + 51, + 52, + 53, + 54, + 55, + 56, + 57 ], - "name" : "Mail and News" - }, - "62" : { - "link" : "/ia7/#path=/objects&parents=HVAC", - "name" : "HVAC", - "icon" : "fa-dashboard" + "name" : "Lights & Appliances", + "icon" : "fa-lightbulb-o" }, - "21" : { - "icon" : "fa-code", - "name" : "Common Code Activation", - "link" : "/bin/code_select.pl" + "11" : { + "children" : [ + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 113, + 115, + 112, + 114 + ], + "name" : "Events, Calendar, & Clock", + "icon" : "fa-calendar" }, - "122" : { - "link" : "/ia7/#path=/rrd?now-6hour?wind_dir", - "icon" : "fa-arrows", - "name" : "Wind Direction" + "103" : { + "name" : "Browse Photos", + "icon" : "fa-archive", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Photos" }, - "76" : { - "link" : "/ia5/security/floorplan.shtml", - "mode" : "advanced", - "name" : "Floorplan View2", - "icon" : "fa-building-o" + "13" : { + "link" : "/ia7/house/main.shtml", + "name" : "About MrHouse", + "icon" : "fa-home" }, - "101" : { - "name" : "Daily Comics", - "icon" : "fa-picture-o", - "link" : "/comics/index.html" + "0" : { + "children" : [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "icon" : "fa-home", + "name" : "Home" }, - "10" : { - "icon" : "fa-picture-o", + "7" : { "children" : [ - 101, - 102, - 103, - 104 + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85 ], - "name" : "Comics & Pictures" + "icon" : "fa-phone", + "name" : "Phone Calls & VoiceMail Msgs" }, - "39" : { - "link" : "/ia5/statistics/backuplog.shtml", - "name" : "View Backup Log", - "icon" : "fa-floppy-o" + "37" : { + "link" : "/ia7/#path=/print_speaklog", + "icon" : "fa-bullhorn", + "name" : "View Speech Log" + }, + "84" : { + "icon" : "fa-sort-alpha-desc", + "external" : "http://www.whitepages.com/find_person.pl?fid=p", + "name" : "Reverse Lookup" + }, + "43" : { + "link" : "/ia5/news/main.shtml", + "name" : "Read e-mail", + "icon" : "fa-envelope" + }, + "2" : { + "name" : "Mail and News", + "icon" : "fa-envelope", + "children" : [ + 43, + 44, + 45, + 46, + 47 + ] + }, + "500" : { + "icon" : "fa-home", + "name" : "Gear Settings", + "children" : [ + 700 + ] } } From 7422319d2524bf13980533750beb797c5d0df732 Mon Sep 17 00:00:00 2001 From: Wayne Gatlin Date: Thu, 22 Apr 2021 20:53:31 -0500 Subject: [PATCH 06/11] Revert "Merge pull request #23 from waynieack/ActionsOnGoogle" This reverts commit 3ec6249241cad6ce8e15cf30c8f7a0a8994d66b9, reversing changes made to 90f59e76ca522ac411dc34d25476f25dae3f9315. --- lib/AoGSmartHome_Items.pm | 136 +++++++++----------------------------- 1 file changed, 31 insertions(+), 105 deletions(-) diff --git a/lib/AoGSmartHome_Items.pm b/lib/AoGSmartHome_Items.pm index b2cf110ef..08221d4c3 100644 --- a/lib/AoGSmartHome_Items.pm +++ b/lib/AoGSmartHome_Items.pm @@ -241,7 +241,6 @@ sub set_state { } elsif ( ref $sub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); - &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; print STDERR "[AoGSmartHome] Debug: running sub $sub(set, $state)\n" if $main::Debug{'aog'}; @@ -254,7 +253,6 @@ sub set_state { # my $mh_object = ::get_object_by_name($realname); - &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ( ($mh_object->isa('Insteon::DimmableLight') @@ -293,7 +291,6 @@ sub get_state { } elsif ( ref $statesub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); - &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $debug = "[AoGSmartHome] Debug: get_state() running sub: $statesub('$realname') - "; @@ -307,7 +304,6 @@ sub get_state { # my $mh_object = ::get_object_by_name($realname); - &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $cstate = $mh_object->$statesub(); @@ -454,12 +450,9 @@ EOF # the device has the "Brightness" trait. Other types of dimmable # objects will have to be added here (right now we only check for # INSTEON and X10 dimmable lights). - &main::print_log("[AoGSmartHome] Object Name: ". $self->{'uuids'}->{$uuid}->{'realname'} ."\n"); my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); - &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); - return undef if !defined $mh_object; - - if ( (defined $mh_object) && ($mh_object->isa('Insteon::DimmableLight') || $mh_object->can('state_level')) ) { + if ($mh_object->isa('Insteon::DimmableLight') + || $mh_object->can('state_level') ) { $response .= <{'uuids'}->{$uuid}->{'realname'}); - &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); - return undef if !defined $mh_object; - if (!$mh_object->isa('Insteon::Thermostat') ) { &main::print_log("[AoGSmartHome] '$self->{'uuids'}->{$uuid}->{'realname'} is an unsupported thermostat; ignoring AoG item."); next; @@ -540,9 +531,9 @@ EOF "name": { "name": "$self->{'uuids'}->{$uuid}->{'name'}" }, - "willReportState": true, + "willReportState": false, "attributes": { - "availableThermostatModes": "off,heat,cool,on,heatcool,fan-only", + "availableThermostatModes": "off,heat,cool,on", "thermostatTemperatureUnit": "F" }, EOF @@ -634,47 +625,24 @@ EOF } elsif ( $self->{'uuids'}->{$uuid}->{'type'} eq 'thermostat' ) { my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); - &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); - return undef if !defined $mh_object; - if ($mh_object->isa('Insteon::Thermostat') ) { - my $mode = lc($mh_object->get_mode()); - $mode = 'heatcool' if ($mode =~ /auto/); - - my $activeThermostatMode = lc($mh_object->get_status); - my $fanmode = lc($mh_object->get_fan_mode); - if ($activeThermostatMode =~ /cooling/) { - $activeThermostatMode = 'cool'; - } elsif ($activeThermostatMode =~ /heating/) { - $activeThermostatMode = 'heat'; - } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { - $activeThermostatMode = 'fan-only'; - } else { - $activeThermostatMode = 'none'; - } + my $mode = $mh_object->get_mode(); my $temp_setpoint; if ($mode eq 'cool') { - $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; - } elsif ($mode eq 'heat') { - $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; - } elsif ($mode eq 'heatcool') { - $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; - $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; + $temp_setpoint = $mh_object->get_cool_sp(); + } else { + $temp_setpoint = $mh_object->get_heat_sp(); } - - my $temp_ambient = &FtoC($mh_object->get_temp); - my $thermostatHumidityAmbient = $mh_object->get_humid; - + + my $temp_ambient = $mh_object->get_temp(); + $response .= <{'uuids'}->{$uuid}->{'realname'}); - &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); - return undef if !defined $mh_object; if ($mh_object->isa('Insteon::DimmableLight') || $mh_object->can('state_level') ) { @@ -755,19 +722,6 @@ EOF return &main::json_page($response); } -sub FtoC { - my ( $F ) = @_; - return ( ($F - 32) * 5/9 ); - #return sprintf "%.0f", ( ($F - 32) * 5/9 ); -} - -sub CtoF { - my ( $F ) = @_; - #return ( (9 * $F/5) + 32 ); - return sprintf "%.0f", ( (9 * $F/5) + 32 ); - -} - sub execute_OnOff { my ( $self, $command ) = @_; @@ -855,57 +809,31 @@ sub execute_ThermostatX { my $realname = $self->{'uuids'}->{$device->{'id'} }->{'realname'}; my $mh_object = ::get_object_by_name($realname); - &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ($mh_object->isa('Insteon::Thermostat') ) { - my $mode = lc($mh_object->get_mode); - $mode = 'heatcool' if ($mode =~ /auto/); - if ( $execution_command =~ /TemperatureSetpoint/ ) { - &main::print_log("[AoGSmartHome] Setting temp: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}) ) if ( $main::Debug{'aog'} ); - my $setpoint = &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}); - if ( $mode eq 'cool') { + my $setpoint = $command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}; + if ($mh_object->get_mode() eq 'cool') { $mh_object->cool_setpoint($setpoint); - } elsif( $mode eq 'heat') { + } else { $mh_object->heat_setpoint($setpoint); } - } elsif ( $execution_command =~ /ThermostatTemperatureSetRange/ ) { - &main::print_log("[AoGSmartHome] Setting cool: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'})." Heat: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'})) if ( $main::Debug{'aog'} ); - $mh_object->cool_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'}) ); - $mh_object->heat_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'}) ); } elsif ( $execution_command =~ /ThermostatSetMode/ ) { my $mode = $command->{'execution'}->[0]->{'params'}->{'thermostatMode'}; - $mode = 'auto' if ($mode =~ /heatcool/); $mh_object->mode($mode); } - $mode = lc($mh_object->get_mode); - $mode = 'heatcool' if ($mode =~ /auto/); - my $activeThermostatMode = lc($mh_object->get_status()); - my $fanmode = lc($mh_object->get_fan_mode); - if ($activeThermostatMode =~ /cooling/) { - $activeThermostatMode = 'cool'; - } elsif ($activeThermostatMode =~ /heating/) { - $activeThermostatMode = 'heat'; - } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { - $activeThermostatMode = 'fan-only'; - } else { - $activeThermostatMode = 'none'; - } - - my $temp_setpoint; - if ($mode eq 'cool') { - $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; - } elsif ($mode eq 'heat') { - $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; - } elsif ($mode eq 'heatcool') { - $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; - $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; - } - - my $temp_ambient = &FtoC($mh_object->get_temp); - my $thermostatHumidityAmbient = $mh_object->get_humid; + my $mode = $mh_object->get_mode(); + + my $temp_setpoint; + if ($mode eq 'cool') { + $temp_setpoint = $mh_object->get_cool_sp(); + } else { + $temp_setpoint = $mh_object->get_heat_sp(); + } + + my $temp_ambient = $mh_object->get_temp(); $response .= " {"; $response .= < Date: Sat, 24 Apr 2021 14:47:01 -0500 Subject: [PATCH 07/11] Revert "Merge pull request #25 from waynieack/AlexaBridge" This reverts commit d096140b348b5210266cc5f6c6398f22706d4ec0, reversing changes made to 65a8195846aa347c5fea90355567bb33a510bfba. --- lib/AlexaBridge.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/AlexaBridge.pm b/lib/AlexaBridge.pm index d8a772108..74b2e33f0 100644 --- a/lib/AlexaBridge.pm +++ b/lib/AlexaBridge.pm @@ -861,7 +861,7 @@ sub process_http { next unless $name; my $state = &get_set_state( $self, $AlexaObjects, $uuid, 'get' ); $statep1 = qq[{"]; - if ( ( $Http{'Accept-Encoding'} =~ m/gzip/ ) or ( $::config_parms{'alexaForceLongFormat'} ) ) { + if ( $Http{'Accept-Encoding'} =~ m/gzip/ ) { &main::print_log("[Alexa] Debug: Returning long format. Accept-Encoding=" . $Http{'Accept-Encoding'}) if $main::Debug{'alexa'}; $statep2=qq[":{"state":{$state,"alert": "select","mode": "homeautomation","reachable": true},"swupdate": {"state": "readytoinstall","lastinstall": null},"type": "Dimmable light","name": "]; $statep3=qq[","modelid": "LWB014","manufacturername": "Philips","productname": "Hue white lamp","capabilities": {"certified": true,"control": {"mindimlevel": 5000,"maxlumen": 840},"streaming": {"renderer": false,"proxy": false}},"config": {"archetype": "classicbulb","function": "functional","direction": "omnidirectional"},"uniqueid": "00:17:88:01:04:00:3d:96-0b","swversion": "1.23.0_r20156","swconfigid": "321D79EA","productid": "Philips-LWB014-1-A19DLv4"}]; From d04d12336b81c051aee0ca46c69a1671a2c63c4a Mon Sep 17 00:00:00 2001 From: Wayne Gatlin Date: Sat, 24 Apr 2021 14:47:06 -0500 Subject: [PATCH 08/11] Revert "Merge pull request #26 from waynieack/Harmon" This reverts commit ca118e505dc75827650279cdfad591a16b470e04, reversing changes made to d096140b348b5210266cc5f6c6398f22706d4ec0. --- lib/HARMON.pm | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/HARMON.pm b/lib/HARMON.pm index d6c4bf9e4..f25582b83 100755 --- a/lib/HARMON.pm +++ b/lib/HARMON.pm @@ -911,7 +911,6 @@ sub check_for_data { } if ( $connecttype eq 'tcp' ) { - $main::Socket_Ports{ "$instance" . '_sender' }{data} = undef; if ( $Socket_Items{$instance}{'socket'}->active ) { $NewCmd = uc( unpack( 'H*', ( $Socket_Items{$instance}{'socket'}->said ) ) ); } From 937296a36438b2d747977fd73d55f7712b4d1d53 Mon Sep 17 00:00:00 2001 From: Wayne Gatlin Date: Mon, 26 Apr 2021 20:13:06 -0500 Subject: [PATCH 09/11] Update collections.json --- data/web/collections.json | 1236 ++++++++++++++++++------------------- 1 file changed, 615 insertions(+), 621 deletions(-) diff --git a/data/web/collections.json b/data/web/collections.json index 6b0bef1f2..e8a21760a 100644 --- a/data/web/collections.json +++ b/data/web/collections.json @@ -1,179 +1,215 @@ { - "59" : { - "name" : "Weather.com - Local", - "icon" : "fa-cloud", - "iframe" : "http://www.weather.com/weather/local/91403" + "113" : { + "link" : "/clock/index.html", + "icon" : "fa-clock-o", + "name" : "LED Clock" }, - "9" : { - "icon" : "fa-microphone", - "name" : "Speech", + "69" : { + "mode" : "advanced", + "link" : "/ia5/security/webcam.shtml", + "name" : "Windowed Overview", + "icon" : "fa-th-large" + }, + "11" : { + "name" : "Events, Calendar, & Clock", "children" : [ - 97, - 98, - 100, - 99 - ] + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 113, + 115, + 112, + 114 + ], + "icon" : "fa-calendar" }, - "56" : { - "name" : "Browse Appliances", - "icon" : "fa-sitemap", - "link" : "/ia7/#path=/objects&parents=Appliances" + "29" : { + "icon" : "fa-globe", + "name" : "List Global Variables", + "link" : "/ia7/#path=/vars_global" }, - "114" : { - "icon" : "fa-exclamation-circle", - "mode" : "advanced", - "name" : "Browse Timers", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timers" + "73" : { + "link" : "/ia5/security/backyardcam.shtml", + "icon" : "fa-pagelines", + "name" : "Backyard Camera" }, - "91" : { - "link" : "/ia5/entertain/shortcuts.shtml", - "icon" : "fa-bookmark-o", - "name" : "TV Shortcuts" + "116" : { + "link" : "/bin/weather_graph_zoom.pl", + "icon" : "fa-search", + "name" : "Weather Zoom" }, - "46" : { - "icon" : "fa-inbox", - "name" : "Postal Mailbox", - "link" : "/ia5/news/postalmail.shtml" + "94" : { + "link" : "/ia5/entertain/internetradio.shtml", + "name" : "Internet Radio", + "icon" : "fa-sitemap" }, - "8" : { - "icon" : "fa-music", - "name" : "TV/Radio Guide & MP3 Music", + "7" : { "children" : [ - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96 + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85 + ], + "name" : "Phone Calls & VoiceMail Msgs", + "icon" : "fa-phone" + }, + "19" : { + "icon" : "fa-gears", + "mode" : "advanced", + "name" : "Browse Widgets", + "children" : [ + 31, + 32, + 33, + 34, + 35 ] }, - "121" : { - "link" : "/ia7/#path=/rrd?now-6hour?wind_speed", - "icon" : "wi-strong-wind", - "name" : "Wind Speed" + "40" : { + "link" : "/ia5/statistics/webstats.shtml", + "icon" : "fa-link", + "mode" : "advanced", + "name" : "WebServer Statistics" }, - "104" : { - "name" : "Browse Entertainment", - "icon" : "fa-gamepad", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment" + "79" : { + "link" : "/bin/phone_search.pl", + "icon" : "fa-search", + "name" : "Search Calls" }, - "74" : { - "icon" : "fa-desktop", - "name" : "Desktop Camera", - "link" : "/ia5/security/desktopcam.shtml" + "92" : { + "external" : "http://www.google.com/search?&q=movie%3A+91403", + "icon" : "fa-film", + "name" : "Local Movies" }, - "75" : { - "link" : "/ia7/#path=/floorplan?Sample_Floorplan", - "icon" : "fa-building-o", - "name" : "Floorplan View" + "42" : { + "name" : "Browse This Category", + "icon" : "fa-ellipsis-v", + "mode" : "advanced", + "link" : "/ia7/widgets_checkbox" }, - "80" : { - "icon" : "fa-list", - "name" : "Phone List", - "link" : "/bin/phone_list.pl" + "41" : { + "name" : "HouseServer Statistics", + "icon" : "fa-home", + "mode" : "advanced", + "link" : "/ia5/statistics/housestats.shtml" + }, + "600" : { + "name" : "Status", + "link" : "/ia7/#path=/objects&parents=ia7_status_items" }, "89" : { "name" : "TV Guide", - "external" : "http://tvguide.com/Listings/index.asp?I=70620&Zip=91403", - "icon" : "fa-book" + "icon" : "fa-book", + "external" : "http://tvguide.com/Listings/index.asp?I=70620&Zip=91403" }, - "120" : { - "link" : "/ia7/#path=/rrd?now-6hour?indoor_humid", - "name" : "Indoor Humidity", - "icon" : "wi-humidity" + "34" : { + "link" : "/ia7/widgets_radiobutton", + "mode" : "advanced", + "icon" : "fa-dot-circle-o", + "name" : "Radiobutton Widgets" }, - "62" : { - "link" : "/ia7/#path=/objects&parents=HVAC", - "name" : "HVAC", - "icon" : "fa-dashboard" + "63" : { + "icon" : "fa-moon-o", + "name" : "Sun & Moon Data", + "link" : "/ia5/outside/sunmoon.shtml" }, - "77" : { - "name" : "Recent Incoming Calls", - "icon" : "fa-arrow-down", - "link" : "/bin/phone_in.pl" + "109" : { + "icon" : "fa-shopping-cart", + "name" : "Shopping List", + "link" : "/bin/shopping_list.pl" }, - "119" : { + "124" : { + "link" : "/ia7/#path=/rrd?now-6hour?rain_rate", "icon" : "wi-sprinkle", - "name" : "Outdoor Humidity", - "link" : "/ia7/#path=/rrd?now-6hour?outdoor_humid" + "name" : "Rain Rate" }, - "700" : { - "user" : "$Authorized" + "meta" : { + "version" : "1.4" }, - "67" : { - "link" : "/ia5/outside/browse.shtml", - "name" : "Browse Category", - "icon" : "fa-archive" + "4" : { + "icon" : "fa-lightbulb-o", + "name" : "Lights & Appliances", + "children" : [ + 51, + 52, + 53, + 54, + 55, + 56, + 57 + ] }, - "60" : { - "name" : "Weather.com - National", - "external" : "http://www.weather.com/maps/maptype/currentweatherusnational/index_large.html", - "icon" : "fa-globe" + "44" : { + "name" : "Read CNN", + "icon" : "fa-book", + "external" : "http://www.cnn.com" }, - "49" : { - "link" : "/bin/menu.pl", - "mode" : "advanced", - "icon" : "fa-list-alt", - "name" : "Menu Control" + "30" : { + "link" : "/ia7/#path=/vars_save", + "icon" : "fa-save", + "name" : "List Save Variables" }, - "36" : { - "name" : "View Print Log", - "icon" : "fa-list", - "link" : "/ia7/#path=/print_log" + "81" : { + "link" : "/ia5/phone/voicemail.shtml", + "icon" : "fa-envelope-o", + "name" : "VoiceMail Messages" }, - "99" : { - "link" : "/ia5/speak/speechsettings.shtml", - "mode" : "advanced", - "icon" : "fa-cog", - "name" : "Speech Settings" + "121" : { + "link" : "/ia7/#path=/rrd?now-6hour?wind_speed", + "name" : "Wind Speed", + "icon" : "wi-strong-wind" }, - "45" : { - "name" : "Newsgroups", - "external" : "http://groups.google.com/grphp", - "icon" : "fa-group" + "78" : { + "name" : "Recent Outgoing Calls", + "icon" : "fa-arrow-up", + "link" : "/bin/phone_out.pl" }, - "90" : { - "external" : "http://tvguide.com/tv", - "name" : "What's On Now", - "icon" : "fa-desktop" + "53" : { + "link" : "/ia7/#path=objects&type=X10_Appliance", + "icon" : "fa-sitemap", + "name" : "Control X10 Appliances" }, - "86" : { - "name" : "MP3 Jukebox", - "icon" : "fa-music", - "link" : "/misc/mp3.html" + "28" : { + "icon" : "fa-desktop", + "mode" : "advanced", + "name" : "Setup TV Provider", + "link" : "/bin/set_parm_tv_provider.pl" }, - "73" : { - "link" : "/ia5/security/backyardcam.shtml", - "name" : "Backyard Camera", - "icon" : "fa-pagelines" + "119" : { + "name" : "Outdoor Humidity", + "icon" : "wi-sprinkle", + "link" : "/ia7/#path=/rrd?now-6hour?outdoor_humid" }, - "88" : { - "link" : "/tv", - "icon" : "fa-calendar-o", - "name" : "TV Today" + "50" : { + "name" : "Browse Modes", + "icon" : "fa-th", + "link" : "/ia5/modes/browse.shtml" }, - "83" : { - "name" : "White Pages", - "external" : "http://www.whitepages.com/", - "icon" : "fa-home" + "60" : { + "icon" : "fa-globe", + "name" : "Weather.com - National", + "external" : "http://www.weather.com/maps/maptype/currentweatherusnational/index_large.html" }, - "98" : { - "icon" : "fa-volume-up", - "name" : "Speak Text", - "link" : "/ia7/house/speaktext.shtml" + "118" : { + "icon" : "wi-thermometer", + "name" : "Indoor Temp", + "link" : "/ia7/#path=/rrd?now-6hour?indoor_temp" }, - "96" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Music", - "name" : "Browse Music", - "icon" : "fa-headphones" + "77" : { + "icon" : "fa-arrow-down", + "name" : "Recent Incoming Calls", + "link" : "/bin/phone_in.pl" }, "20" : { - "icon" : "fa-wrench", "name" : "Setup MrHouse", "children" : [ 21, @@ -183,214 +219,197 @@ 25, 26, 27, - 28, - "126" - ] - }, - "115" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timed_Events", - "name" : "Browse Timed_Events", - "icon" : "fa-archive" - }, - "6" : { - "children" : [ - 68, - 70, - 72, - 73, - 74, - 75, - 76, - 69, - 71 + 28 ], - "icon" : "fa-video-camera", - "name" : "Security Cameras" + "icon" : "fa-wrench" }, - "42" : { - "icon" : "fa-ellipsis-v", + "114" : { + "icon" : "fa-exclamation-circle", + "name" : "Browse Timers", "mode" : "advanced", - "name" : "Browse This Category", - "link" : "/ia7/widgets_checkbox" + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timers" }, - "102" : { - "icon" : "fa-desktop", - "external" : "$config_parms{html_dir}/misc/photos.shtml", - "name" : "Picture Frame" + "64" : { + "link" : "/ia5/outside/earthquakes.shtml", + "name" : "Earthquakes", + "icon" : "fa-bullseye" }, - "22" : { - "name" : "User Code Activation", - "icon" : "fa-code", - "link" : "/bin/code_unselect.pl" + "104" : { + "name" : "Browse Entertainment", + "icon" : "fa-gamepad", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment" }, - "47" : { - "link" : "/ia5/news/browse.shtml", - "name" : "Browse News", - "icon" : "fa-list-alt" + "38" : { + "icon" : "fa-warning", + "name" : "View Error Log", + "link" : "/ia5/statistics/errorlog.shtml" }, - "25" : { - "name" : "INI Editor", - "icon" : "fa-table", - "link" : "/bin/iniedit.pl" + "46" : { + "link" : "/ia5/news/postalmail.shtml", + "name" : "Postal Mailbox", + "icon" : "fa-inbox" }, - "50" : { - "link" : "/ia5/modes/browse.shtml", - "icon" : "fa-th", - "name" : "Browse Modes" + "112" : { + "name" : "Timers", + "icon" : "fa-exclamation", + "mode" : "advanced", + "link" : "/misc/timers.shtml" }, - "10" : { + "12" : { + "icon" : "fa-bar-chart-o", "children" : [ - 101, - 102, - 103, - 104 + 36, + 37, + 38, + 39, + 40, + 41, + 42 ], - "name" : "Comics & Pictures", - "icon" : "fa-picture-o" - }, - "92" : { - "icon" : "fa-film", - "external" : "http://www.google.com/search?&q=movie%3A+91403", - "name" : "Local Movies" - }, - "30" : { - "link" : "/ia7/#path=/vars_save", - "icon" : "fa-save", - "name" : "List Save Variables" - }, - "meta" : { - "version" : "1.6" + "name" : "Statistics & Logged Data" }, - "65" : { - "icon" : "fa-fire", - "mode" : "advanced", - "name" : "Iridium Flares", - "link" : "/ia5/outside/sattelite.shtml" + "93" : { + "external" : "http://realguide.real.com/", + "name" : "Radio Guide", + "icon" : "fa-signal" }, "17" : { "link" : "/ia7/#path=objects&type=Group", "icon" : "fa-group", "name" : "Browse Groups" }, - "26" : { - "name" : "Program IRMAN", - "mode" : "advanced", - "icon" : "fa-rss", - "link" : "/ia5/house/irman.shtml" - }, - "81" : { - "icon" : "fa-envelope-o", - "name" : "VoiceMail Messages", - "link" : "/ia5/phone/voicemail.shtml" + "22" : { + "name" : "User Code Activation", + "icon" : "fa-code", + "link" : "/bin/code_unselect.pl" }, - "71" : { - "link" : "/cameras/", - "icon" : "fa-film", + "99" : { + "name" : "Speech Settings", "mode" : "advanced", - "name" : "Camera Files" - }, - "35" : { - "link" : "/ia7/widgets_checkbox", - "icon" : "fa-check-square-o", - "name" : "Checkbox Widgets" + "icon" : "fa-cog", + "link" : "/ia5/speak/speechsettings.shtml" }, "3" : { + "name" : "Modes", "children" : [ 48, 50, 49 ], - "name" : "Modes", "icon" : "fa-tasks" }, - "68" : { - "link" : "/ia5/security/main.shtml", - "name" : "Basic Overview", - "icon" : "fa-video-camera" + "85" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Phone", + "name" : "Browse Phone", + "icon" : "fa-archive" }, - "64" : { - "link" : "/ia5/outside/earthquakes.shtml", - "name" : "Earthquakes", - "icon" : "fa-bullseye" + "700" : { + "user" : "$Authorized" }, - "72" : { - "link" : "/ia5/security/frontdoor.shtml", - "name" : "Frontdoor Camera", - "icon" : "fa-home" + "82" : { + "external" : "http://www.yellowpages.com/", + "name" : "Yellow Pages", + "icon" : "fa-building-o" }, - "1" : { - "children" : [ - 13, - 15, - 16, - 17, - 18, - 20, - 29, - 30, - 19 - ], - "icon" : "fa-home", - "name" : "Mr. House Home" + "75" : { + "link" : "/ia7/#path=/floorplan?Sample_Floorplan", + "icon" : "fa-building-o", + "name" : "Floorplan View" }, - "79" : { - "name" : "Search Calls", - "icon" : "fa-search", - "link" : "/bin/phone_search.pl" + "115" : { + "icon" : "fa-archive", + "name" : "Browse Timed_Events", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Timed_Events" }, - "61" : { - "children" : [ - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125 - ], - "name" : "Weather Station", - "icon" : "fa-bolt" + "27" : { + "link" : "/bin/headercontrol.pl", + "icon" : "fa-wrench", + "mode" : "advanced", + "name" : "Header Control" }, - "106" : { - "icon" : "fa-calendar", - "name" : "Calendar", - "link" : "/organizer/calendar.pl", - "keys" : "true" + "59" : { + "iframe" : "http://www.weather.com/weather/local/91403", + "icon" : "fa-cloud", + "name" : "Weather.com - Local" }, - "101" : { - "name" : "Daily Comics", - "icon" : "fa-picture-o", - "link" : "/comics/index.html" + "102" : { + "icon" : "fa-desktop", + "name" : "Picture Frame", + "external" : "$config_parms{html_dir}/misc/photos.shtml" }, - "78" : { - "link" : "/bin/phone_out.pl", - "name" : "Recent Outgoing Calls", - "icon" : "fa-arrow-up" + "100" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Speech", + "icon" : "fa-microphone", + "name" : "Browse Speech" }, - "116" : { - "name" : "Weather Zoom", - "icon" : "fa-search", - "link" : "/bin/weather_graph_zoom.pl" + "55" : { + "link" : "/ia7/#path=/objects&parents=All_Lights", + "name" : "Browse All Lights", + "icon" : "fa-lightbulb-o" }, - "48" : { - "icon" : "fa-tasks", - "name" : "Control Modes & Events", - "link" : "/ia7/house/modes.shtml" + "70" : { + "icon" : "fa-clock-o", + "name" : "Time Lapse Viewer", + "link" : "/ia5/security/wc_sshow.shtml" }, - "41" : { - "link" : "/ia5/statistics/housestats.shtml", - "name" : "HouseServer Statistics", - "mode" : "advanced", + "500" : { + "children" : [ + 700 + ], + "name" : "Gear Settings", "icon" : "fa-home" }, - "69" : { - "name" : "Windowed Overview", + "37" : { + "icon" : "fa-bullhorn", + "name" : "View Speech Log", + "link" : "/ia7/#path=/print_speaklog" + }, + "68" : { + "name" : "Basic Overview", + "icon" : "fa-video-camera", + "link" : "/ia5/security/main.shtml" + }, + "72" : { + "icon" : "fa-home", + "name" : "Frontdoor Camera", + "link" : "/ia5/security/frontdoor.shtml" + }, + "26" : { "mode" : "advanced", - "icon" : "fa-th-large", - "link" : "/ia5/security/webcam.shtml" + "icon" : "fa-rss", + "name" : "Program IRMAN", + "link" : "/ia5/house/irman.shtml" + }, + "16" : { + "icon" : "fa-archive", + "name" : "Browse Categories", + "link" : "/ia7/#path=/objects&type=Category" + }, + "83" : { + "name" : "White Pages", + "icon" : "fa-home", + "external" : "http://www.whitepages.com/" + }, + "107" : { + "link" : "/organizer/contacts.pl", + "name" : "Address Book", + "keys" : "true", + "icon" : "fa-book" + }, + "110" : { + "name" : "List Manager", + "icon" : "fa-list-alt", + "link" : "/bin/ListManager.pl" + }, + "125" : { + "name" : "Baro Pressure", + "icon" : "wi-cloud-refresh", + "link" : "/ia7/#path=/rrd?now-6hour?outside_press" + }, + "80" : { + "link" : "/bin/phone_list.pl", + "name" : "Phone List", + "icon" : "fa-list" }, "5" : { "children" : [ @@ -405,392 +424,332 @@ 65, 66 ], - "icon" : "fa-umbrella", - "name" : "HVAC & Weather" - }, - "28" : { - "link" : "/bin/set_parm_tv_provider.pl", - "name" : "Setup TV Provider", - "icon" : "fa-desktop", - "mode" : "advanced" - }, - "29" : { - "name" : "List Global Variables", - "icon" : "fa-globe", - "link" : "/ia7/#path=/vars_global" - }, - "97" : { - "link" : "/ia7/#path=/print_speaklog", - "name" : "View Speech Log", - "icon" : "fa-bullhorn" - }, - "44" : { - "external" : "http://www.cnn.com", - "name" : "Read CNN", - "icon" : "fa-book" + "name" : "HVAC & Weather", + "icon" : "fa-umbrella" }, "15" : { "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=MisterHouse", - "name" : "Browse MrHouse", - "icon" : "fa-home" + "icon" : "fa-home", + "name" : "Browse MrHouse" }, - "113" : { - "icon" : "fa-clock-o", - "name" : "LED Clock", - "link" : "/clock/index.html" + "120" : { + "name" : "Indoor Humidity", + "icon" : "wi-humidity", + "link" : "/ia7/#path=/rrd?now-6hour?indoor_humid" }, - "63" : { - "link" : "/ia5/outside/sunmoon.shtml", - "name" : "Sun & Moon Data", - "icon" : "fa-moon-o" + "91" : { + "name" : "TV Shortcuts", + "icon" : "fa-bookmark-o", + "link" : "/ia5/entertain/shortcuts.shtml" }, - "107" : { + "13" : { + "link" : "/ia7/house/main.shtml", + "name" : "About MrHouse", + "icon" : "fa-home" + }, + "57" : { + "link" : "/ia7/#path=/floorplan?Sample_Floorplan", + "name" : "Floorplan View", + "icon" : "fa-home" + }, + "108" : { + "link" : "/organizer/tasks.pl", + "name" : "TODO List", "keys" : "true", - "icon" : "fa-book", - "name" : "Address Book", - "link" : "/organizer/contacts.pl" + "icon" : "fa-list" }, - "34" : { - "name" : "Radiobutton Widgets", - "mode" : "advanced", - "icon" : "fa-dot-circle-o", - "link" : "/ia7/widgets_radiobutton" + "105" : { + "icon" : "fa-check", + "name" : "Calendar Facts", + "link" : "/ia5/calendar/main.shtml" }, - "125" : { - "name" : "Baro Pressure", - "icon" : "wi-cloud-refresh", - "link" : "/ia7/#path=/rrd?now-6hour?outside_press" + "117" : { + "icon" : "fa-leaf", + "name" : "Outdoor Temp", + "link" : "/ia7/#path=/rrd?now-6hour?outdoor_temp" }, - "118" : { - "icon" : "wi-thermometer", - "name" : "Indoor Temp", - "link" : "/ia7/#path=/rrd?now-6hour?indoor_temp" + "98" : { + "icon" : "fa-volume-up", + "name" : "Speak Text", + "link" : "/ia7/house/speaktext.shtml" }, - "52" : { - "link" : "/ia7/#path=objects&type=X10_Item", - "icon" : "fa-info", - "name" : "Control X10 Items" + "97" : { + "link" : "/ia7/#path=/print_speaklog", + "name" : "View Speech Log", + "icon" : "fa-bullhorn" + }, + "61" : { + "children" : [ + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125 + ], + "name" : "Weather Station", + "icon" : "fa-bolt" + }, + "51" : { + "icon" : "fa-group", + "name" : "Browse Groups", + "link" : "/ia7/#path=/objects&type=Group" + }, + "14" : { + "link" : "/ia7/house/aboutaudrey.shtml", + "name" : "About 3Com Audrey", + "icon" : "fa-desktop" }, "31" : { "link" : "/ia7/widgets", "icon" : "fa-cogs", "name" : "All Widgets" }, - "14" : { - "icon" : "fa-desktop", - "name" : "About 3Com Audrey", - "link" : "/ia7/house/aboutaudrey.shtml" + "56" : { + "link" : "/ia7/#path=/objects&parents=Appliances", + "icon" : "fa-sitemap", + "name" : "Browse Appliances" }, - "70" : { - "icon" : "fa-clock-o", - "name" : "Time Lapse Viewer", - "link" : "/ia5/security/wc_sshow.shtml" + "6" : { + "icon" : "fa-video-camera", + "name" : "Security Cameras", + "children" : [ + 68, + 70, + 72, + 73, + 74, + 75, + 76, + 69, + 71 + ] }, - "40" : { - "link" : "/ia5/statistics/webstats.shtml", - "name" : "WebServer Statistics", + "84" : { + "icon" : "fa-sort-alpha-desc", + "name" : "Reverse Lookup", + "external" : "http://www.whitepages.com/find_person.pl?fid=p" + }, + "74" : { + "link" : "/ia5/security/desktopcam.shtml", + "name" : "Desktop Camera", + "icon" : "fa-desktop" + }, + "33" : { + "link" : "/ia7/widgets_entry", + "icon" : "fa-pencil-square-o", + "name" : "Entry Widgets" + }, + "103" : { + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Photos", + "icon" : "fa-archive", + "name" : "Browse Photos" + }, + "65" : { + "icon" : "fa-fire", + "name" : "Iridium Flares", "mode" : "advanced", - "icon" : "fa-link" + "link" : "/ia5/outside/sattelite.shtml" }, - "117" : { - "link" : "/ia7/#path=/rrd?now-6hour?outdoor_temp", - "name" : "Outdoor Temp", - "icon" : "fa-leaf" + "35" : { + "link" : "/ia7/widgets_checkbox", + "icon" : "fa-check-square-o", + "name" : "Checkbox Widgets" }, - "51" : { - "icon" : "fa-group", - "name" : "Browse Groups", - "link" : "/ia7/#path=/objects&type=Group" + "0" : { + "name" : "Home", + "children" : [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "icon" : "fa-home" }, - "123" : { - "link" : "/ia7/#path=/rrd?now-6hour?rain", - "icon" : "wi-rain", - "name" : "Total Rain" + "86" : { + "icon" : "fa-music", + "name" : "MP3 Jukebox", + "link" : "/misc/mp3.html" }, - "55" : { - "link" : "/ia7/#path=/objects&parents=All_Lights", - "name" : "Browse All Lights", - "icon" : "fa-lightbulb-o" + "43" : { + "link" : "/ia5/news/main.shtml", + "name" : "Read e-mail", + "icon" : "fa-envelope" }, - "126" : { - "link" : "/ia7/#path=/security", - "icon" : "fa-users", - "name" : "Users and Groups" + "88" : { + "link" : "/tv", + "icon" : "fa-calendar-o", + "name" : "TV Today" }, - "112" : { - "name" : "Timers", - "icon" : "fa-exclamation", - "mode" : "advanced", - "link" : "/misc/timers.shtml" + "36" : { + "icon" : "fa-list", + "name" : "View Print Log", + "link" : "/ia7/#path=/print_log" }, - "600" : { - "link" : "/ia7/#path=/objects&parents=ia7_status_items", - "name" : "Status" + "24" : { + "name" : "Edit Items", + "icon" : "fa-list", + "link" : "/bin/items.pl" }, - "109" : { - "icon" : "fa-shopping-cart", - "name" : "Shopping List", - "link" : "/bin/shopping_list.pl" + "123" : { + "link" : "/ia7/#path=/rrd?now-6hour?rain", + "name" : "Total Rain", + "icon" : "wi-rain" }, - "58" : { - "name" : "Weather Underground", - "icon" : "fa-sun-o", - "iframe" : "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=91403" + "48" : { + "name" : "Control Modes & Events", + "icon" : "fa-tasks", + "link" : "/ia7/house/modes.shtml" }, "87" : { "icon" : "fa-play-circle", "name" : "Media Center", "link" : "/media/mhmedia.html" }, - "18" : { - "link" : "/ia7/#path=/objects&type=Type", - "icon" : "fa-info", - "name" : "Browse Items" + "9" : { + "name" : "Speech", + "children" : [ + 97, + 98, + 100, + 99 + ], + "icon" : "fa-microphone" }, - "76" : { - "link" : "/ia5/security/floorplan.shtml", - "name" : "Floorplan View2", + "66" : { + "name" : "GPS/APRS Tracking", "mode" : "advanced", - "icon" : "fa-building-o" + "icon" : "fa-road", + "link" : "/ia5/outside/tracking.shtml" }, "95" : { "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Entertainment", "icon" : "fa-gamepad", "name" : "Browse Entertainment" }, - "21" : { - "link" : "/bin/code_select.pl", - "name" : "Common Code Activation", - "icon" : "fa-code" - }, - "124" : { - "icon" : "wi-sprinkle", - "name" : "Rain Rate", - "link" : "/ia7/#path=/rrd?now-6hour?rain_rate" - }, - "27" : { - "link" : "/bin/headercontrol.pl", - "name" : "Header Control", - "mode" : "advanced", - "icon" : "fa-wrench" - }, - "23" : { - "icon" : "fa-clock-o", - "name" : "Edit Triggers", - "link" : "/ia7/#path=triggers" + "106" : { + "link" : "/organizer/calendar.pl", + "keys" : "true", + "name" : "Calendar", + "icon" : "fa-calendar" }, - "94" : { - "link" : "/ia5/entertain/internetradio.shtml", - "icon" : "fa-sitemap", - "name" : "Internet Radio" + "58" : { + "name" : "Weather Underground", + "iframe" : "http://www.wunderground.com/cgi-bin/findweather/getForecast?query=91403", + "icon" : "fa-sun-o" }, - "38" : { - "link" : "/ia5/statistics/errorlog.shtml", - "name" : "View Error Log", - "icon" : "fa-warning" + "67" : { + "link" : "/ia5/outside/browse.shtml", + "icon" : "fa-archive", + "name" : "Browse Category" }, - "110" : { - "link" : "/bin/ListManager.pl", + "49" : { "icon" : "fa-list-alt", - "name" : "List Manager" - }, - "19" : { - "children" : [ - 31, - 32, - 33, - 34, - 35 - ], "mode" : "advanced", - "icon" : "fa-gears", - "name" : "Browse Widgets" + "name" : "Menu Control", + "link" : "/bin/menu.pl" }, - "82" : { - "icon" : "fa-building-o", - "external" : "http://www.yellowpages.com/", - "name" : "Yellow Pages" - }, - "66" : { - "icon" : "fa-road", + "71" : { + "link" : "/cameras/", + "name" : "Camera Files", "mode" : "advanced", - "name" : "GPS/APRS Tracking", - "link" : "/ia5/outside/tracking.shtml" - }, - "100" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Speech", - "name" : "Browse Speech", - "icon" : "fa-microphone" + "icon" : "fa-film" }, - "16" : { - "name" : "Browse Categories", - "icon" : "fa-archive", - "link" : "/ia7/#path=/objects&type=Category" - }, - "105" : { - "link" : "/ia5/calendar/main.shtml", - "icon" : "fa-check", - "name" : "Calendar Facts" + "18" : { + "icon" : "fa-info", + "name" : "Browse Items", + "link" : "/ia7/#path=/objects&type=Type" }, - "85" : { - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Phone", - "icon" : "fa-archive", - "name" : "Browse Phone" + "8" : { + "icon" : "fa-music", + "children" : [ + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96 + ], + "name" : "TV/Radio Guide & MP3 Music" }, - "39" : { - "name" : "View Backup Log", - "icon" : "fa-floppy-o", - "link" : "/ia5/statistics/backuplog.shtml" + "23" : { + "icon" : "fa-clock-o", + "name" : "Edit Triggers", + "link" : "/bin/triggers.pl" }, - "57" : { - "icon" : "fa-home", - "name" : "Floorplan View", - "link" : "/ia7/#path=/floorplan?Sample_Floorplan" + "47" : { + "link" : "/ia5/news/browse.shtml", + "icon" : "fa-list-alt", + "name" : "Browse News" }, "32" : { "link" : "/ia7/widgets_label", "name" : "Label Widgets", "icon" : "fa-square-o" }, - "93" : { - "icon" : "fa-signal", - "external" : "http://realguide.real.com/", - "name" : "Radio Guide" - }, - "12" : { + "1" : { + "icon" : "fa-home", "children" : [ - 36, - 37, - 38, - 39, - 40, - 41, - 42 + 13, + 15, + 16, + 17, + 18, + 20, + 29, + 30, + 19 ], - "name" : "Statistics & Logged Data", - "icon" : "fa-bar-chart-o" + "name" : "Mr. House Home" }, - "122" : { - "link" : "/ia7/#path=/rrd?now-6hour?wind_dir", - "icon" : "fa-arrows", - "name" : "Wind Direction" + "52" : { + "icon" : "fa-info", + "name" : "Control X10 Items", + "link" : "/ia7/#path=objects&type=X10_Item" }, - "33" : { - "name" : "Entry Widgets", - "icon" : "fa-pencil-square-o", - "link" : "/ia7/widgets_entry" + "90" : { + "external" : "http://tvguide.com/tv", + "name" : "What's On Now", + "icon" : "fa-desktop" }, - "108" : { - "name" : "TODO List", - "icon" : "fa-list", - "link" : "/organizer/tasks.pl", - "keys" : "true" + "96" : { + "name" : "Browse Music", + "icon" : "fa-headphones", + "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Music" }, - "24" : { - "link" : "/bin/items.pl", - "name" : "Edit Items", - "icon" : "fa-list" + "25" : { + "icon" : "fa-table", + "name" : "INI Editor", + "link" : "/bin/iniedit.pl" }, - "53" : { - "link" : "/ia7/#path=objects&type=X10_Appliance", - "icon" : "fa-sitemap", - "name" : "Control X10 Appliances" + "45" : { + "external" : "http://groups.google.com/grphp", + "icon" : "fa-group", + "name" : "Newsgroups" }, "111" : { - "link" : "/ia7/#path=triggers", + "link" : "/bin/triggers.pl", "name" : "Alarms", "icon" : "fa-bell-o" }, - "4" : { - "children" : [ - 51, - 52, - 53, - 54, - 55, - 56, - 57 - ], - "name" : "Lights & Appliances", - "icon" : "fa-lightbulb-o" - }, - "11" : { - "children" : [ - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 113, - 115, - 112, - 114 - ], - "name" : "Events, Calendar, & Clock", - "icon" : "fa-calendar" - }, - "103" : { - "name" : "Browse Photos", - "icon" : "fa-archive", - "link" : "/ia7/#path=/objects&type=Voice_Cmd&category=Photos" - }, - "13" : { - "link" : "/ia7/house/main.shtml", - "name" : "About MrHouse", - "icon" : "fa-home" - }, - "0" : { - "children" : [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12 - ], - "icon" : "fa-home", - "name" : "Home" - }, - "7" : { - "children" : [ - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85 - ], - "icon" : "fa-phone", - "name" : "Phone Calls & VoiceMail Msgs" - }, - "37" : { - "link" : "/ia7/#path=/print_speaklog", - "icon" : "fa-bullhorn", - "name" : "View Speech Log" - }, - "84" : { - "icon" : "fa-sort-alpha-desc", - "external" : "http://www.whitepages.com/find_person.pl?fid=p", - "name" : "Reverse Lookup" - }, - "43" : { - "link" : "/ia5/news/main.shtml", - "name" : "Read e-mail", - "icon" : "fa-envelope" - }, "2" : { - "name" : "Mail and News", "icon" : "fa-envelope", "children" : [ 43, @@ -798,13 +757,48 @@ 45, 46, 47 - ] + ], + "name" : "Mail and News" }, - "500" : { - "icon" : "fa-home", - "name" : "Gear Settings", + "62" : { + "link" : "/ia7/#path=/objects&parents=HVAC", + "name" : "HVAC", + "icon" : "fa-dashboard" + }, + "21" : { + "icon" : "fa-code", + "name" : "Common Code Activation", + "link" : "/bin/code_select.pl" + }, + "122" : { + "link" : "/ia7/#path=/rrd?now-6hour?wind_dir", + "icon" : "fa-arrows", + "name" : "Wind Direction" + }, + "76" : { + "link" : "/ia5/security/floorplan.shtml", + "mode" : "advanced", + "name" : "Floorplan View2", + "icon" : "fa-building-o" + }, + "101" : { + "name" : "Daily Comics", + "icon" : "fa-picture-o", + "link" : "/comics/index.html" + }, + "10" : { + "icon" : "fa-picture-o", "children" : [ - 700 - ] + 101, + 102, + 103, + 104 + ], + "name" : "Comics & Pictures" + }, + "39" : { + "link" : "/ia5/statistics/backuplog.shtml", + "name" : "View Backup Log", + "icon" : "fa-floppy-o" } } From 5b179f217d0558bfd54661db87ef2ea4e992a8ad Mon Sep 17 00:00:00 2001 From: waynieack Date: Mon, 26 Apr 2021 21:12:46 -0500 Subject: [PATCH 10/11] Fixed and completed the Insteon Thermostat functionality, Added more logging, and fixed some code that would crash if misconfigured --- lib/AoGSmartHome_Items.pm | 160 +++++++++++++++++++++++++++----------- 1 file changed, 114 insertions(+), 46 deletions(-) diff --git a/lib/AoGSmartHome_Items.pm b/lib/AoGSmartHome_Items.pm index c94ba3623..05a8f1b59 100644 --- a/lib/AoGSmartHome_Items.pm +++ b/lib/AoGSmartHome_Items.pm @@ -222,7 +222,7 @@ sub set_state { my $sub = $self->{'uuids'}->{$uuid}->{'sub'}; my $statesub = $self->{'uuids'}->{$uuid}->{'statesub'}; - # Map state if there is a mapping defined + # Map state if there is a mapping defined $state = $self->{'uuids'}->{$uuid}->{ lc($state) } if $self->{'uuids'}->{$uuid}->{ lc($state) }; print STDERR "[AoGSmartHome] Debug: set_state(uuid='$uuid', state='$state', name='$name' realname='$realname' sub='$sub')\n" @@ -241,6 +241,7 @@ sub set_state { } elsif ( ref $sub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; print STDERR "[AoGSmartHome] Debug: running sub $sub(set, $state)\n" if $main::Debug{'aog'}; @@ -253,6 +254,7 @@ sub set_state { # my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ( $mh_object->can('is_dimmable') && $mh_object->is_dimmable && $state =~ /\d+/ ) { @@ -290,6 +292,7 @@ sub get_state { } elsif ( ref $statesub eq 'CODE' ) { my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $debug = "[AoGSmartHome] Debug: get_state() running sub: $statesub('$realname') - "; @@ -303,6 +306,7 @@ sub get_state { # my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; my $cstate = $mh_object->$statesub(); @@ -333,7 +337,6 @@ sub new { if ( -e $file ) { my $restoredhash = retrieve($file); $self->{idmap} = $restoredhash->{idmap}; - # delete $self->{idmap}->{objects}->{''}; if ( $main::Debug{'aog'} ) { print STDERR "[AoGSmartHome] Debug: dumping persistent IDMAP:\n"; @@ -363,11 +366,12 @@ sub add { my ( $self, $realname, $name, $sub, $on, $off, $statesub, $dev_properties ) = @_; my ($type, $room); # AoG Smart Home Provider device properties + if( !$realname ) { - &main::print_log("[AoGSmartHome] Realname must be specified for persistent idmap; ignoring AoG item."); - return; + &main::print_log("[AoGSmartHome] Realname must be specified for persistent idmap; ignoring AoG item."); + return; } - + if ( !$name ) { $name = $realname; $name =~ s/\$//g; @@ -412,8 +416,7 @@ sub add { # If no device type is provided we default to 'light' $self->{'uuids'}->{$uuid}->{'type'} = lc($type) || 'light'; $self->{'uuids'}->{$uuid}->{'room'} = $room if $room; - print "Added AOG device:\n " . Dumper( $self->{'uuids'}->{$uuid} ) - if $main::Debug{'aog'} > 2; + print "[AoGSmartHome] Added AOG device:\n " . Dumper( $self->{'uuids'}->{$uuid} ) if $main::Debug{'aog'} > 2; } =item C @@ -457,11 +460,12 @@ EOF # the device has the "Brightness" trait. Other types of dimmable # objects will have to be added here (right now we only check for # INSTEON and X10 dimmable lights). + &main::print_log("[AoGSmartHome] Object Name: ". $self->{'uuids'}->{$uuid}->{'realname'} ."\n"); my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); - if( !ref $mh_object ) { - &main::print_log("[AoGSmartHome] '$self->{'uuids'}->{$uuid}->{'realname'} is not found."); - } - elsif( $mh_object->can('is_dimmable') && $mh_object->is_dimmable ) { + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + + if( $mh_object->can('is_dimmable') && $mh_object->is_dimmable ) { $response .= <{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if (!$mh_object->isa('Insteon::Thermostat') ) { &main::print_log("[AoGSmartHome] '$self->{'uuids'}->{$uuid}->{'realname'} is an unsupported thermostat; ignoring AoG item."); next; @@ -540,9 +546,9 @@ EOF "name": { "name": "$self->{'uuids'}->{$uuid}->{'name'}" }, - "willReportState": false, + "willReportState": true, "attributes": { - "availableThermostatModes": "off,heat,cool,on", + "availableThermostatModes": "off,heat,cool,on,heatcool,fan-only", "thermostatTemperatureUnit": "F" }, EOF @@ -634,24 +640,47 @@ EOF } elsif ( $self->{'uuids'}->{$uuid}->{'type'} eq 'thermostat' ) { my $mh_object = ::get_object_by_name($self->{'uuids'}->{$uuid}->{'realname'}); + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if ($mh_object->isa('Insteon::Thermostat') ) { - my $mode = $mh_object->get_mode(); + my $mode = lc($mh_object->get_mode()); + $mode = 'heatcool' if ($mode =~ /auto/); + + my $activeThermostatMode = lc($mh_object->get_status); + my $fanmode = lc($mh_object->get_fan_mode); + if ($activeThermostatMode =~ /cooling/) { + $activeThermostatMode = 'cool'; + } elsif ($activeThermostatMode =~ /heating/) { + $activeThermostatMode = 'heat'; + } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { + $activeThermostatMode = 'fan-only'; + } else { + $activeThermostatMode = 'none'; + } my $temp_setpoint; if ($mode eq 'cool') { - $temp_setpoint = $mh_object->get_cool_sp(); - } else { - $temp_setpoint = $mh_object->get_heat_sp(); + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; + } elsif ($mode eq 'heat') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; + } elsif ($mode eq 'heatcool') { + $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; + $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; } - - my $temp_ambient = $mh_object->get_temp(); - + + my $temp_ambient = &FtoC($mh_object->get_temp); + my $thermostatHumidityAmbient = $mh_object->get_humid; + $response .= <{'uuids'}->{$uuid}->{'realname'}); - if( $mh_object->can('is_dimmable') && $mh_object->is_dimmable ) { + &main::print_log("[AoGSmartHome] Invalid device ".$self->{'uuids'}->{$uuid}->{'realname'}."; ignoring AoG item.") if ( !defined $mh_object ); + return undef if !defined $mh_object; + if( $mh_object->can('is_dimmable') && $mh_object->is_dimmable ) { # INSTEON devices return "on" or "off". The AoG "Brightness" trait # expects needs "100" or "0", so we adjust here accordingly. @@ -730,13 +760,26 @@ EOF return &main::json_page($response); } +sub FtoC { + my ( $F ) = @_; + return ( ($F - 32) * 5/9 ); + #return sprintf "%.0f", ( ($F - 32) * 5/9 ); +} + +sub CtoF { + my ( $F ) = @_; + #return ( (9 * $F/5) + 32 ); + return sprintf "%.0f", ( (9 * $F/5) + 32 ); + +} + sub execute_OnOff { my ( $self, $command ) = @_; my $response = ' { "ids": ['; - my $turn_on = $command->{'execution'}->[0]->{'params'}->{'on'}; + my $turn_on = $command->{'execution'}->[0]->{'params'}->{'on'} eq "true" ? 1 : 0; foreach my $device ( @{ $command->{'devices'} } ) { set_state( $self, $device->{'id'}, $turn_on ? 'on' : 'off' ); @@ -817,31 +860,57 @@ sub execute_ThermostatX { my $realname = $self->{'uuids'}->{$device->{'id'} }->{'realname'}; my $mh_object = ::get_object_by_name($realname); + &main::print_log("[AoGSmartHome] Invalid device $realname; ignoring AoG item.") if ( !defined $mh_object ); return undef if !defined $mh_object; if ($mh_object->isa('Insteon::Thermostat') ) { + my $mode = lc($mh_object->get_mode); + $mode = 'heatcool' if ($mode =~ /auto/); + if ( $execution_command =~ /TemperatureSetpoint/ ) { - my $setpoint = $command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}; - if ($mh_object->get_mode() eq 'cool') { + &main::print_log("[AoGSmartHome] Setting temp: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}) ) if ( $main::Debug{'aog'} ); + my $setpoint = &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpoint'}); + if ( $mode eq 'cool') { $mh_object->cool_setpoint($setpoint); - } else { + } elsif( $mode eq 'heat') { $mh_object->heat_setpoint($setpoint); } + } elsif ( $execution_command =~ /ThermostatTemperatureSetRange/ ) { + &main::print_log("[AoGSmartHome] Setting cool: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'})." Heat: ".&CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'})) if ( $main::Debug{'aog'} ); + $mh_object->cool_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointHigh'}) ); + $mh_object->heat_setpoint( &CtoF($command->{'execution'}->[0]->{'params'}->{'thermostatTemperatureSetpointLow'}) ); } elsif ( $execution_command =~ /ThermostatSetMode/ ) { my $mode = $command->{'execution'}->[0]->{'params'}->{'thermostatMode'}; + $mode = 'auto' if ($mode =~ /heatcool/); $mh_object->mode($mode); } - my $mode = $mh_object->get_mode(); - - my $temp_setpoint; - if ($mode eq 'cool') { - $temp_setpoint = $mh_object->get_cool_sp(); - } else { - $temp_setpoint = $mh_object->get_heat_sp(); - } - - my $temp_ambient = $mh_object->get_temp(); + $mode = lc($mh_object->get_mode); + $mode = 'heatcool' if ($mode =~ /auto/); + my $activeThermostatMode = lc($mh_object->get_status()); + my $fanmode = lc($mh_object->get_fan_mode); + if ($activeThermostatMode =~ /cooling/) { + $activeThermostatMode = 'cool'; + } elsif ($activeThermostatMode =~ /heating/) { + $activeThermostatMode = 'heat'; + } elsif ( ( $fanmode =~ /always on/) and ( $activeThermostatMode =~ /off/ ) ) { + $activeThermostatMode = 'fan-only'; + } else { + $activeThermostatMode = 'none'; + } + + my $temp_setpoint; + if ($mode eq 'cool') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_cool_sp).','; + } elsif ($mode eq 'heat') { + $temp_setpoint = '"thermostatTemperatureSetpoint": '. &FtoC($mh_object->get_heat_sp).','; + } elsif ($mode eq 'heatcool') { + $temp_setpoint = '"thermostatTemperatureSetpointHigh": '. &FtoC($mh_object->get_cool_sp).','."\n"; + $temp_setpoint .= '"thermostatTemperatureSetpointLow": '. &FtoC($mh_object->get_heat_sp).','; + } + + my $temp_ambient = &FtoC($mh_object->get_temp); + my $thermostatHumidityAmbient = $mh_object->get_humid; $response .= " {"; $response .= < 2; # # First, send the commands to all the devices specified in the request. # @@ -987,5 +1056,4 @@ This program is distributed in the hope that it will be useful, but WITHOUT ANY You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -=cut - +=cut \ No newline at end of file From 7547f3d4edf364d78b53209b64f6f2e4e5a7a8cd Mon Sep 17 00:00:00 2001 From: waynieack Date: Mon, 26 Apr 2021 21:25:15 -0500 Subject: [PATCH 11/11] Merge Missing line --- lib/AoGSmartHome_Items.pm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/AoGSmartHome_Items.pm b/lib/AoGSmartHome_Items.pm index 05a8f1b59..e57290fd8 100644 --- a/lib/AoGSmartHome_Items.pm +++ b/lib/AoGSmartHome_Items.pm @@ -959,6 +959,10 @@ sub execute { "commands": [ EOF + if ($main::Debug{'aog'} > 2) { + $Data::Dumper::Maxdepth = 0; + print "Aog received execute request:\n " . Dumper( $body ); + } # # First, send the commands to all the devices specified in the request. #