Skip to content
View in the app

A better way to browse. Learn more.

Universal Devices Forum

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

sjenkins

Members

Everything posted by sjenkins

  1. Added a status for RTS shades which gives last command executed. Was a feature request of @Techman ; as well he found a bug in discovery, much appreciated for both! Next will be working on another feature request by @Guy Lavoie also for the RTS blinds to give allow setting of partial moves by percentage. Boy this would all be much easier if we bought blinds with full control, eh? ## 0.0.26 - Skip OGP protocol gateway during discovery: TaHoma reports ogp:Bridge (Open Generic Protocol gateway) as a device; it is infrastructure, not a shade. Previously it appeared as an extra node with no useful commands. Run Discover after updating to remove an existing OGP node automatically. ## 0.0.25 - Shade Last Command Executed (GV8): new status alongside Last Command (GV7); reports Open, Close, Stop, or My Position when sent; starts as None on node startup; GV7 still tracks Pending / Completed / Failed from the gateway
  2. @Guy Lavoie , ok, can do a default time as well (just timed my outdoor Phantom blinds and they take almost 26s to raise). Looks like the old plugin used configuration variables. In the new EISY api the retention across boots and installs is not an issue. the problem with doing it in a config is you don't know the node number until the first boot anyway and this node number can change with a rediscover. I think I would implement with a settable value which is stored as a persistent value. Sound Kosher?
  3. @Guy Lavoie , (and anyone else who has 2c to give), The way I see it this is just an RTS shade function (shouldn't be needed in the new positional based ones). The user enters a time to fully raise/lower, Total Span Move Time We add a command with parameters Move by % This command is Activate with parameters of Move %(1-99), Direction (up,down) The program sends a up/down command, then Stop after x seconds. x being: Move % x Total Span Move Time Thinking now of status. As the shade can be moved manually I don't think keeping a % position has any value. I think the Sade Last Command would be something like Move% Does the above meet your vision?
  4. @Guy Lavoie , I did , then I forgot, good reminder. I'll put it in my todo list, yours is a bit more complicated. Last bit has been busy with life, when I had plugin time I did a bunch of spring cleaning and got some of the older plugins common on the backend. Was slowing me down when everytime I switched work to a plugin the workflow was so different.
  5. Just put up to beta v0.0.25 with a feature request from @Techman Added a field called Last Command Executed which upon startup is populated with None then moves to {Open, Close, Stop, or My Position} based on the command given. Note that if the RTS shade is moved manually with the remote or even from the Tahoma app, there is no feedback here, this is purely as a memory for your programs ; careful as you use it. Feedback welcome as we tweak this plugin. ## 0.0.25 - Shade Last Command Executed (GV8): new status alongside Last Command (GV7); reports Open, Close, Stop, or My Position when sent; starts as None on node startup; GV7 still tracks Pending / Completed / Failed from the gateway
  6. Fixed where there is a delay at normal startup for the waiting on user connection message to clear. As well have fixed the upload to the data folder for your devfile. This and other communications and moving to the modern UD standards on things. Tests out on my system, give it a try: ## 0.50.11 - Fix config overwrite on update: stop re-injecting example devlist/devfile and MQTT defaults on every parameter load; clear customParams in server.json so plugin updates do not reset saved Polyglot configuration - Clear waiting notice when discovery or MQTT connection fails ## 0.50.10 - Fix stop() crash on early shutdown: remove legacy mqttc teardown path that raised AttributeError when discovery failed before the MQTT bridge was created (common during eisy-ui config) ## 0.50.9 - Clear MQTT waiting notice promptly after broker connects: drain Paho callbacks at startup and at DISCOVER so "Waiting on user MQTT connection" does not linger for a full poll cycle when the broker is already up - Fix devfile path resolution: bare filename (e.g. virtualconfig.yaml) resolves to data/<name>; empty devfile no longer silently loads mqtt-devices.yaml — use an explicit devfile or devlist - Fix startup log (was incorrectly labeled "Virtual Devices") - PG3 store manifest server.json) with executable udi-mqtt-pg3x.py — use Update from the store - Rename entry script from mqtt-poly.py to udi-mqtt-pg3x.py - Standard bootstrap (error handling; version in VERSION / profile/version.txt / server.json) - Developer toolchain: uv, pytest profile sync test, Makefile, CONTRIBUTING (runtime install unchanged: install.sh + requirements.txt)
  7. Back office, configuration uploading & examples changes. 3.2.0 \ DONE PG3 store manifest (server.json) with executable udi-virtual-pg3x.py — use Update from the store \ DONE rename entry script from udi-Virtual-pg3.py to udi-virtual-pg3x.py \ DONE load devFile YAML from data/ when given a bare filename (matches MQTT devfile behavior) \ DONE standard bootstrap; VersionHistory.md renamed to CHANGELOG.md \ DONE developer toolchain: uv, pytest profile sync test, Makefile, CONTRIBUTING (runtime install unchanged: install.sh + requirements.txt) 3.1.29 \ DONE upgrade dependencies to address Dependabot security alerts (aiohttp, requests, urllib3, ujson, black, and others) \ DONE setuptools remains pinned <81 for pyisy/pkg_resources compatibility (udi_interface Node import)
  8. Back office and dependabot. See below for the hopefully boring details. Let me know if otherwise. ## 1.14.0 - DONE PG3 store manifest server.json) with executable udi-hunterdouglas-pg3x.py - DONE rename entry script from hunterdouglas-poly.py to udi-hunterdouglas-pg3x.py (use Update from the store; delete/reinstall if the node server fails to start) - DONE standard bootstrap (error handling, version in VERSION / profile/version.txt / server.json) - DONE rename versionHistory.md to CHANGELOG.md (template standard) - DONE default branch and documentation links aligned with udi-hunterdouglas-pg3x naming - DONE developer toolchain: uv, pytest profile sync test, Makefile (runtime install unchanged: install.sh + requirements.txt) - DONE includes aiohttp 3.14.3 security updates from 1.13.6
  9. Able to vette that camera status {person, face, line, motion, audio} are firing programs. Control events are there, still verifying that they fire programs too ; next will need to check out if scenes are getting fired based on events. So you know alarms modes and custom written alarms (like in the alarm manager) are not part of the public api as Unifi calls it. If/when added I can add to this. I have decided to avoid logging in with a user name or local alarm mode with this plugin. Anyway, let me know if it's working for you , it's working for me. Now my deck lights don't turn off If someone is out there (using the unifi camera as motion detector).
  10. Well I want to thank the ud team, I have been using the program editing for a few days now I do like it. One question is when a program gets messed up due to a plugin uninstall or reinstall, the admin would paint it yellow. It there an equivalent in the new UI ? I think they are ALWAYS looking for specific feedback. Just saying it sucks is usually not a path to continuous improvement.
  11. This is meant as a plugin to integrate the newish Unifi Protect api to your Eisy. The api is a bit limited but is growing as time goes on. By sticking to the api we stay out of needing local logins or the issue of global/local alarms (search the unifi forums if you're interested). You can see in the log I changed the name to stay out of the way of the legacy UniFi Protect project. Mostly the focus here is to get camera and sensor events to the Eisy so you can use them in your programs. Cameras: People, Animal, Faces(generic), Vehicle(generic), Line Cross, Motion, All the specific audio. Sensors: Motion, Door, Temp, Humidity, Tamper, etc. Doorbells: (I don't have one yet as they are not in stock but the api has them there) The indicators have been set up in Status and Control so you can use them in your programs. As always give me feedback and/or requests, but I am going to limit this to the api in its current form and grow with it. So no local login or other work arounds. ## 1.5.2 - Complete NLS command names for all nodedefs (fixes missing Control triggers on AI+Audio cameras) - Add CONNECTED/DISCONNECTED control commands for online/offline transitions - Add profile test ensuring every send command has an ISY program label - Rename project to Unifi Protect api udi-unifiprotectapi-pg3x) ## 1.5.1 - Fix line crossing ignored on public API cameras (``hasLineCrossing`` omitted from featureFlags) - Log line crossing events at INFO for easier EISY troubleshooting ## 1.5.0 - Capability-based camera nodedefs: detect, AI (face/LPR/line), AI+audio, doorbell - Expand camera events: line crossing, audio detections (smoke, CO, siren, etc.), doorbell ring - Capability-based sensor nodedefs: contact, motion, leak, glass, environmental — no unused drivers at 0 - Add temperature_units config (C or F; default F) for UP Sense environmental sensors - Detection and sensor state changes emit ISY control commands reportCmd) for program triggers - Document Public API scope, read-only design, and Global Alarm Manager alignment in README ## 1.3.2 - Fix sensor live updates dropped after partial WebSocket messages recalculated capabilities - Only refresh sensor capability map when config fields change; infer modelKey from device id - Apply driver updates only for fields present in each WebSocket payload ## 1.3.1 - Fix sensor Connected flapping on WebSocket partial updates (merge cached state) - Fix environmental UOMs: °C=4, lux=36 (was inches/wind direction) ## 1.3.0 - Add USL / UP Sense sensor nodes via GET /integration/v1/sensors - Per-sensor drivers: motion, contact, leak, tamper, alarm, glass break, temp, humidity, light - Capability-aware driver mapping from Protect featureFlags ## 1.2.0 - Migrate to UniFi Protect Public Integration API (v1) with API-key-only auth - Camera discovery via GET /integration/v1/cameras - Live updates via subscribe/events and subscribe/devices WebSockets - Remove legacy private bootstrap API and username/password configuration - Drop doorbell ringtone/volume commands until official API support is added ## 1.1.0 - Real-time WebSocket motion and smart detection drivers - Doorbell ringtone, volume, and repeat control - Standard PG3x bootstrap, server.json, and version sync tooling
  12. Well I know who to talk about if I need to know anything about this device!
  13. Sorry for a bit of churn but have been working on getting my plugins more common and up to newer UD standards. As I inherited some older pg2 plugins there are a few things. In that process I have uncovered a bug or two. User facing I have fixed the .zip upload to .yaml config file ; this gets stored in the data directory and should survive most UD upgrades coming. Works well on my machine, let me know. Will push to production after a bit. 3.2.0 \ DONE PG3 store manifest (server.json) with executable udi-virtual-pg3x.py — use Update from the store \ DONE rename entry script from udi-Virtual-pg3.py to udi-virtual-pg3x.py \ DONE load devFile YAML from data/ when given a bare filename (matches MQTT devfile behavior) \ DONE standard bootstrap; VersionHistory.md renamed to CHANGELOG.md \ DONE developer toolchain: uv, pytest profile sync test, Makefile, CONTRIBUTING (runtime install unchanged: install.sh + requirements.txt) 3.1.29 \ DONE upgrade dependencies to address Dependabot security alerts (aiohttp, requests, urllib3, ujson, black, and others) \ DONE setuptools remains pinned <81 for pyisy/pkg_resources compatibility (udi_interface Node import) 3.1.28 \ DONE fix Controller/Temp ready_event poll gating (.is_set) \ DONE temp reset_stats clears prevVal; CtoF/FtoC mutual exclusion \ DONE VirtualTempC commands match nodedef; QUERY in nodedefs \ DONE onDelay TIMER report; generic SETST naming; NLS ctl QUERY typo
  14. Fixed where there is a delay at normal startup for the waiting on user connection message to clear. As well have fixed the upload to the data folder for your devfile. This and other communications and moving to the modern UD standards on things. Tests out on my system, give it a try: ## 0.50.10 - Fix stop() crash on early shutdown: remove legacy mqttc teardown path that raised AttributeError when discovery failed before the MQTT bridge was created (common during eisy-ui config) ## 0.50.9 - Clear MQTT waiting notice promptly after broker connects: drain Paho callbacks at startup and at DISCOVER so "Waiting on user MQTT connection" does not linger for a full poll cycle when the broker is already up - Fix devfile path resolution: bare filename (e.g. virtualconfig.yaml) resolves to data/<name>; empty devfile no longer silently loads mqtt-devices.yaml — use an explicit devfile or devlist - Fix startup log (was incorrectly labeled "Virtual Devices") - PG3 store manifest server.json) with executable udi-mqtt-pg3x.py — use Update from the store - Rename entry script from mqtt-poly.py to udi-mqtt-pg3x.py - Standard bootstrap (error handling; version in VERSION / profile/version.txt / server.json) - Developer toolchain: uv, pytest profile sync test, Makefile, CONTRIBUTING (runtime install unchanged: install.sh + requirements.txt)
  15. Pushing to production the bugfix @mike2545 found for us. ## 0.50.8 - Enable Paho MQTT automatic reconnect with exponential backoff (2–30s) - Start with connect_async() and keep retrying when the broker is offline at startup - Show a persistent notice while waiting for or recovering the user MQTT connection - Reject publishes while disconnected instead of silently dropping commands - Resubscribe to status topics only after a successful connect callback - Defer MQTT connect/disconnect handling to the Polyglot thread to avoid races - Subscribe only newly discovered topics during DISCOVER; skip node queries on reconnect - Add on_connect_fail logging for TCP connection failures before CONNACK
  16. Another beta before production, I have been working on making my plugins more common and to UD current standards. This should all be back office. Tests well on my system, let me know how it goes. ## 1.14.0 - DONE PG3 store manifest server.json) with executable udi-hunterdouglas-pg3x.py - DONE rename entry script from hunterdouglas-poly.py to udi-hunterdouglas-pg3x.py (use Update from the store; delete/reinstall if the node server fails to start) - DONE standard bootstrap (error handling, version in VERSION / profile/version.txt / server.json) - DONE rename versionHistory.md to CHANGELOG.md (template standard) - DONE default branch and documentation links aligned with udi-hunterdouglas-pg3x naming - DONE developer toolchain: uv, pytest profile sync test, Makefile (runtime install unchanged: install.sh + requirements.txt) - DONE includes aiohttp 3.14.3 security updates from 1.13.6 ## 1.13.6 - DONE package updates "dependabot" — aiohttp 3.14.3 security fixes ## 1.13.5 - DONE sync versionHistory.md with udi-hunterdouglas-pg3x.py; older history in versionHistory.md only - DONE fix ready_event poll checks (Controller, Shade, Scene) - DONE fix updateAllFromServer throttling and in-progress guard - DONE fix parameterHandler startup flag after checkParams - DONE replace eval() with json/ast parsing for gatewayip list - DONE accept gateway hostnames in addition to IP addresses - DONE thread-safe stale gateway event cleanup - DONE reset controller event_polling_in on thread exit - DONE add HTTP GET timeout to match PUT - DONE G3 shade discovery sets roomId and default batteryStatus - DONE Shade updateData null guards for missing shade data - DONE fix battery-alert event batteryLevel key handling - DONE fix Scene Gen2 active check (generation not gateway IP) - DONE safe scene-deactivated remove from sceneIdsActive - DONE consolidate PowerView URL constants into utils/urls.py - DONE consolidate gateway event lookup helpers in utils/gateway_events.py - DONE shared start_event_poll_thread helper for node event polling - DONE fix start_event_poll_thread when called from Controller - DONE get_gateway_event wait timeout so pollers cannot block indefinitely - DONE SSE Not Found handling restarts stream without stopping node pollers - DONE G2 updateAllFromServerG2 fails if rooms/shades/scenes fetch fails
  17. Small improvement to clear the server connection error quicker during normal start. Everything else is me getting my plugins more common to and to UD standards. Let me know how it goes on yours, worked for my set-up. ## 0.0.24 - Clear server error sooner when the TaHoma gateway recovers: auto-reconnect restores controller Connection status (ST=1) and clears the Polyglot error notice without a NodeServer restart - PG3 store manifest server.json) with executable udi-tahoma-pg3x.py — use Update from the store (validated on beta) - Rename entry script from udi-tahoma-pg3x (no extension) to udi-tahoma-pg3x.py - Standard bootstrap (error handling; version in VERSION / profile/version.txt / server.json) - Rename VersionHistory.md to CHANGELOG.md (template standard) - Developer toolchain: uv, pytest profile sync test, Makefile, CONTRIBUTING (runtime install unchanged: install.sh + requirements.txt)
  18. Thanks for pointing out the opportunity!
  19. Based on a bug report from @mike2545 I have pushed a bugfix for external mqtt servers which also benefits stability for the whole plugin. Give it a try, then I will push to production. ## 0.50.8 - Enable Paho MQTT automatic reconnect with exponential backoff (2–30s) - Start with connect_async() and keep retrying when the broker is offline at startup - Show a persistent notice while waiting for or recovering the user MQTT connection - Reject publishes while disconnected instead of silently dropping commands - Resubscribe to status topics only after a successful connect callback - Defer MQTT connect/disconnect handling to the Polyglot thread to avoid races - Subscribe only newly discovered topics during DISCOVER; skip node queries on reconnect - Add on_connect_fail logging for TCP connection failures before CONNACK
  20. @mike2545 just pushed a beta v0.50.8 to the non-production store, give it a try thanks again
  21. @mike2545 , good find, this looks like its not new to this version but has been around a bit. I have not been testing with an external mqtt server but likely should add this to my tests. I would normally say to just write a pull request but today the repo is on the move (should not effect downloads or updates) and may move twice before the day is up. Can you attach your patch files in a response & I will incorporate them into the solution, likely with a test or two to lock it in. Again, thanks so much for the thoughtful bug report!
  22. , if it's a local only plugin, you need to reinstall it. @Michel Kohanim , Just to be clear, local only, with no beta or production with same id, or all local? Thx
  23. should just be simple dependabot updates, no user facing changes. ## 0.50.7 - Bump pip dependencies in Pipfile.lock to resolve 12 Dependabot security alerts - urllib3 2.5.0 → 2.7.0, requests 2.32.5 → 2.33.0, pytest 7.4.4 → 9.0.3, and related transitive updates
  24. @Guy Lavoie ,Should not be customer facing but I treat any change with suspicion, that’s why I roll from local to beta to production.
  25. Dependabot updates: VERSION = "1.13.6" """ 1.13.6 DONE package updates "dependabot" — aiohttp 3.14.3 security fixes

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.