
Andy P
Members-
Posts
123 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
Andy P's Achievements
-
Oh Interesting - I do see they came out with a new so called local hub - which currently shows as Sold Out. Seems the old hubs cost less than $25 each and the new hubs will be over $300 and have a bunch of other features. I have 36 nodes now on my Yolink node server. They all seem pretty responsive, but since a lot of them are checking for leaks and water running, I would rest a bit easier knowing the notifications/actions are not relying on an internet connection and server farm.
-
Thanks for the link - I checked in the current version of the App (1.40.36) and there is no option YoLink App ([Local Hub] -> [Local Network] -> [Integrations] -> [Local API]) yet. Does anyone else see it? Will keep checking.
-
Discovery failed please check logs for a more detailed error
Andy P replied to richord's topic in TotalConnect
So I took a look and here is the code that is failing - it is using the V1 soap API. That is no longer supported. The plugin needs to be recoded to use the V2 api documented here: TotalConnect2 Web API Help Page or use the code from GITHUB here total-connect-client/total_connect_client/partition.py at master · craigjmidwinter/total-connect-client · GitHub. Unfortunately, I don't know how to do that, but maybe someday. # create zone nodes # We are using GetPanelMetaDataAndFullStatusEx_V1 because we want the extended zone info panel_data = self.tc.soapClient.service.GetPanelMetaDataAndFullStatusEx_V1(self.tc.token, loc_id, 0, 0, 1) if panel_data['ResultCode'] == 0: LOGGER.debug("Getting zones for panel {}".format(device_addr)) zones = panel_data['PanelMetadataAndStatus']['Zones']['ZoneInfoEx'] if zones is None: raise Exception("No zones were found for {} - {} \n{}".format(device_name, device_addr, panel_data)) for zone in zones: if not bool(zone.CanBeBypassed) and not bool(strtobool(self.include_non_bypassable_zones)): LOGGER.debug("Skipping zone {} with name {}".format(zone.ZoneID, zone.ZoneDescription)) continue self.add_zone(loc_id, loc_name, device_addr, device['DeviceID'], zone, update) else: LOGGER.warn("Unable to get extended panel information, code {} data {}".format(panel_data["ResultCode"], panel_data["ResultData"])) Here is a good discussion on the topic Switch over to new TotalConnect REST API · Issue #245 · craigjmidwinter/total-connect-client -
I have 8 of those 4 button i3 devices now and have been slowly swapping out my old 4 button keypads because my wife like the simplicity of the new devices. One rule - YOU MUST FACTORY RESET THE NEW DEVICES BEFORE USING - there, I said it. Yeah, got burned multiple times and the biggest issue is that the load is almost always assigned to the bottom button coming from the factory instead of the top button. The ground wire is in a better place on the i3 devices, so at least that part of the replacement was nice. I really wish the i3 keypads had back lit buttons instead of just the locator led, but I can live with it.
-
I did not see any issues at all after I left it alone for a half hour, came back and logged in, then let the admin console do the query all, looked at the devices and programs and seemed normal. Also, no issues with all of my javascript routines that scrape the rest interfaces of nodes, status, log, program, variables. I thought I might have an issue with some of the Polyglot nodes, but it turns out I just had to wait until they did their next polling cycle and then the status of the devices updated. So, all working BAU for me at least. Andy
-
Oh, interesting, I didn't think about having a separate log file for each program. I figured it was easier to just put them all in one log file and have the first token be the program identifier. I would also vote for having the file manager open to the last position I was at to save all that clicking.
-
As Guy says, it is helpful when you have multiple programs interacting with one another to make sure they are executing in the sequence expected. For example, the breezeway light has four different scenarios depending on the time of day. The program that is supposed to run gets enabled by schedule and the others disabled. If there is motion, it also depends on the time as to which program runs. So this helps me sort out that everything is happening the way I want and expect. I can also see when the Then branch gets triggered and the Else branch. But these are not Notifications in the sense that they notify you. They use the notification function to create a log entry only. No email, no push notification. In that sense, it is exactly the same as every device making a log entry when they turn on/off/dim.
-
I searched the forums and read all the discussions about program execution and how it is not in the log. You can pull the info on each program with 192.168.x.x:8080/rest/programs and get the last run time and next scheduled time. But that is it. So, I decided to try using notifications. In Configuration -> Emails/Notifications -> Customizations I created a notification called Log Program. Left From blank Subject: @webpage:@append:/mydir/mylog.txt Body: ${sys.program.#.address} ${sys.program.#.name} ${sys.program.#.status} ${sys.date} ${sys.time} Then I added the notification to the programs I wanted to log such as this, and both the Then and Else if there was one Breezeway Motion Copy - [ID 009D][Parent 0010] If 'YoLink / Motion Breezeway' is switched Motion Then Set 'Breezeway' On 80% Set 'Breezeway Remote' On 80% Send Notification to 'Default' content 'Log Program' The result I retrieve using 192.168.x.x:8443/FILES/USER/WEB/mydir/mylog.txt looks as follows: program[109] Breezeway Motion True 2025/01/23 02:23:17 PM program[17] Mud or Hall Motion True 2025/01/23 02:23:20 PM program[70] Side Door Opens True 2025/01/23 02:23:20 PM program[17] Mud or Hall Motion False 2025/01/23 02:23:22 PM program[19] Mudroom Motion End True 2025/01/23 02:24:20 PM program[110] Breezeway Motion Off Dim True 2025/01/23 02:24:23 PM program[17] Mud or Hall Motion True 2025/01/23 02:24:29 PM program[17] Mud or Hall Motion True 2025/01/23 02:24:29 PM program[51] Hallway Motion End True 2025/01/23 02:25:08 PM program[110] Breezeway Motion Off Dim True 2025/01/23 02:26:01 PM program[148] Hallway Motion Backstop True 2025/01/23 02:29:30 PM program[110] Breezeway Motion Off Dim True 2025/01/23 02:36:01 PM So now I have a nice log of program execution which I can parse and add to my timeline. Anyone else doing this? Is there a better way? Andy
-
Support of Kasa EP25 and others requiring authentication
Andy P replied to Andy P's topic in Kasa (TP-Link)
I installed 3.2.24. The node server created a node which is visible in the admin console and shows connected. No devices were discovered. I added a secondary discover network broadcast address for the IOT network (which I can ping no problem - no blocking). Still no discovery. I manually added the IP address of a kasa EP25. Restarted everything including rebooting the EISY. Still no device. Turned on debug logging. Did not expect anything on the 3.* network, the devices are on the 11.* network - and the manual discovery got an "unexpected keyword argument 'address' trying to connect" 2025-01-11 06:48:10.377 Thread-9 (handler_start) udi_interface INFO Controller:discover: enter: 192.168.3.255 2025-01-11 06:48:10.377 Thread-10 (run_forever) udi_interface DEBUG Controller:_discover: enter: target=192.168.3.255 2025-01-11 06:48:10.378 Thread-10 (run_forever) kasa.discover DEBUG discover:do_discover: [DISCOVERY] 192.168.3.255 >> {'system': {'get_sysinfo': {}}} 2025-01-11 06:48:10.516 Thread-10 (run_forever) kasa.discover DEBUG discover:discover: Waiting 5 seconds for responses... 2025-01-11 06:48:15.566 Thread-10 (run_forever) kasa.discover DEBUG discover:discover: Discovered 0 devices 2025-01-11 06:48:15.566 Thread-10 (run_forever) udi_interface INFO Controller:_discover: Discover.discover(192.168.3.255) done: checking for previously known devices 2025-01-11 06:48:15.566 Thread-10 (run_forever) udi_interface DEBUG Controller:_discover: exit 2025-01-11 06:48:15.566 Thread-9 (handler_start) udi_interface DEBUG Controller:discover: result=None 2025-01-11 06:48:15.567 Thread-9 (handler_start) udi_interface INFO Controller:discover: calling: _discover(target=192.168.11.255) 2025-01-11 06:48:15.567 Thread-10 (run_forever) udi_interface DEBUG Controller:_discover: enter: target=192.168.11.255 2025-01-11 06:48:15.567 Thread-10 (run_forever) kasa.discover DEBUG discover:do_discover: [DISCOVERY] 192.168.11.255 >> {'system': {'get_sysinfo': {}}} 2025-01-11 06:48:15.568 Thread-10 (run_forever) kasa.discover DEBUG discover:discover: Waiting 5 seconds for responses... 2025-01-11 06:48:20.619 Thread-10 (run_forever) kasa.discover DEBUG discover:discover: Discovered 0 devices 2025-01-11 06:48:20.619 Thread-10 (run_forever) udi_interface INFO Controller:_discover: Discover.discover(192.168.11.255) done: checking for previously known devices 2025-01-11 06:48:20.619 Thread-10 (run_forever) udi_interface DEBUG Controller:_discover: exit 2025-01-11 06:48:20.619 Thread-9 (handler_start) udi_interface DEBUG Controller:discover: result=None 2025-01-11 06:48:20.619 Thread-9 (handler_start) udi_interface INFO Controller:discover: exit 2025-01-11 06:48:20.620 Thread-10 (run_forever) udi_interface INFO Controller:_add_manual_devices: Adding manual device 192.168.11.175 2025-01-11 06:48:20.620 Thread-10 (run_forever) udi_interface ERROR Controller:_add_manual_devices: Controller.discover_single() got an unexpected keyword argument 'address' trying to connect to 192.168.11.175 2025-01-11 06:48:20.620 Thread-10 (run_forever) udi_interface INFO Controller:_add_manual_devices: Adding manual device 192.168.11.179 2025-01-11 06:48:20.620 Thread-10 (run_forever) udi_interface ERROR Controller:_add_manual_devices: Controller.discover_single() got an unexpected keyword argument 'address' trying to connect to 192.168.11.179 2025-01-11 06:48:20.620 Thread-9 (handler_start) udi_interface DEBUG Controller:add_manual_devices: result=None 2025-01-11 06:48:20.620 Thread-9 (handler_start) udi_interface INFO Controller:add_manual_devices: exit 2025-01-11 06:48:20.620 Thread-9 (handler_start) udi_interface INFO Controller:handler_start: exit Kasa Controller -
Hey Ross, fair point. But the script is over 2000 lines long and there 100 css classes, etc. What I could try to do would be to build a very simple example that just embeds one device and combines it with a camera image if that would be helpful. Would be good to know exactly what use case you would be wanting to tackle, ie what device and what type of camera.
-
The topic of getting images from security cameras has been touched on before, and I studied all that in trying to achieve a combination of camera images with EISY node status. I thought I would share this to save someone else some time. The idea was to create these: The devices are retrieved using rest/nodes and rest/status, the on/off cycles around the device comes from rest/log. The top half of the circle is day, the bottom is night. Green dash is current time. The gray dashes are sunrise and sunset from /rest/time. Spokes are motion events in the log. The DIV has been set with a background image subset of an Amcrest camera (here 192.168.2.18) using CSS. Then to refresh it you have to use a script to update the ?t= part of the URL to force a new image. Fine tune the backround-size and position to get the part of the picture you want. Overflow hidden clips the image to the div. --imgVCcar: url('http://192.168.2.18/cgi-bin/snapshot.cgi?t=123456789'); .i_car { position: absolute; width: 230; height: 160; border-radius: 5px; overflow: hidden; background-image:var(--imgVCcar); background-size: 500px ; background-position: 63% 70%; } The breezeway image is from a Unifi Protect camera. You have to set each camera to allow anonymous snapshots first. --imgVCbreeze: url("http://192.168.3.183/snap.jpeg?t=123456789"); .VCbreezeway { background-image: var(--imgVCbreeze); } Function to update the url timestamp to force refresh: function updateTS(value) { var newTS = new Date().getTime(); return value.replace(/\?t=\d+/, '\?t=' + newTS); } The door sensors and motion detectors are YoLink using the plugin. The lights are controlled by Insteon dimmers. The rectangles are lastRunTime info retrieved with /rest/programs. Hope this helps someone! Andy
-
This was the response I received from the ticket: Chris Jahn replied 3 hours ago Hi Andy, We are in the process of fixing and enhancing the NLS capabilities for node servers. Problems like this are fixed in the new code.
-
ok, thanks, I opened a ticket, will let you know.
-
Any guess on why some yolink devices are missing the name in the node info (xray and rest/status) and others are not. For example, this leak sensor: <properties> <property name="Sensor Temperature" uom="17" formatted="72°F" value="72" id="CLITEMP"/> <property name="" uom="25" formatted="Dry" value="0" id="GV0"/> <property name="" uom="25" formatted="High" value="4" id="GV1"/> <property name="" uom="25" formatted="DON/DOF" value="0" id="GV2"/> <property name="Connection State" uom="25" formatted="Online" value="0" id="GV20"/> <property name="Nodeserver Status" uom="25" formatted="Connected" value="1" id="ST"/> </properties> It is not a problem with the admin console because that has all the names right: This Temp Humidity sensor has all the names filled in: <properties> <property name="Battery Level" uom="25" formatted="High" value="4" id="BATLVL"/> <property name="Current Rel Humidity (%)" prec="1" uom="51" formatted="43.3%" value="433" id="CLIHUM"/> <property name="Sensor Temperature" prec="1" uom="17" formatted="73.2°F" value="732" id="CLITEMP"/> <property name="Low Temp Alarm" uom="25" formatted="Normal" value="0" id="GV1"/> <property name="Low Temp Limit" prec="1" uom="17" formatted="64.4°F" value="644" id="GV10"/> <property name="High Temp Limit" uom="17" formatted="95°F" value="95" id="GV11"/> <property name="Low Humidity Limit" uom="51" formatted="0%" value="0" id="GV12"/> <property name="High Humidity Limit" uom="51" formatted="100%" value="100" id="GV13"/> <property name="High Temp Alarm" uom="25" formatted="Normal" value="0" id="GV2"/> <property name="Connection State" uom="25" formatted="Online" value="0" id="GV20"/> <property name="Low Humidity Alarm" uom="25" formatted="Normal" value="0" id="GV4"/> <property name="High Humidity Alarm" uom="25" formatted="Normal" value="0" id="GV5"/> <property name="Battery Alarm" uom="25" formatted="Normal" value="0" id="GV7"/> <property name="Alarm triggered" uom="25" formatted="Normal" value="0" id="GV8"/> <property name="Command Setting" uom="25" formatted="DON/DOF" value="0" id="GV9"/> <property name="Nodeserver Status" uom="25" formatted="Connected" value="1" id="ST"/> </properties> I have the latest everything and restarted everything. Andy
-
Yes, but instead of testing for Wet, I test for not Dry: Notify Leak - [ID 0095][Parent 006C] If 'YoLink / Leak Attic HVAC' Water Sensor is not Dry Or 'YoLink / Leak Attic Hot Water' Water Sensor is not Dry Or 'YoLink / Leak Attic Manifold' Water Sensor is not Dry Or 'YoLink / Leak Barn Utility Room' Water Sensor is not Dry Or 'YoLink / Leak Dining SE' Water Sensor is not Dry Or 'YoLink / Leak Dining West Mid' Water Sensor is not Dry Or 'YoLink / Leak East Office NE' Water Sensor is not Dry Or 'YoLink / Leak Kitchen Island' Water Sensor is not Dry Or 'YoLink / Leak Kitchen Sink' Water Sensor is not Dry Or 'YoLink / Laundry Leak' Water Sensor is not Dry Then Resource 'Notify Leak' Else - No Actions - (To add one, press 'Action') Also, this is how I monitor the battery level: Notify Battery - [ID 009A][Parent 006C] If Time is 6:10:00PM And ( 'YoLink / Leak Attic HVAC' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Attic Hot Water' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Attic Manifold' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Barn Utility Room' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Dining SE' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Dining West Mid' Sensor Battery Level <= Medium Low Or 'YoLink / Leak East Office NE' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Kitchen Island' Sensor Battery Level <= Medium Low Or 'YoLink / Leak Kitchen Sink' Sensor Battery Level <= Medium Low Or 'YoLink / Laundry Leak' Sensor Battery Level <= Medium Low ) Then Resource 'Notify Yolink Battery' Else - No Actions - (To add one, press 'Action')