Hey guys....
long time 😉
Since Dark weather is no more active, thanks Apple. Anyone switch to openweather to get weather data ?
Hi akbooer,
I've an installation with a centralized openluup/DY on Debian 11 where're archived and consolidated several remote openluup/DY on RPI. I'm also using a user-defined (defined with your support) "DataUser.lua" to process metrics and creating different metric names. I've a schema of this configuration but I can't upload on forum.
I'd like to manage outage network connections between remote and centralized system while the remote DY is running and archives data locally.
I see the whisper-fill.py python routine (https://github.com/graphite-project/whisper/blob/master/bin/whisper-fill.py) from Graphite tool. I know that DY/whisper format is different from Graphite/whisper (CSV vs. binary packing), but based on your deep knowledge and experience is it hard to adapt the fill routine to DY/whisper format ?
tnks
donato
Feedback / solutions with openLuup's built-in Shelly bridge.
Been using zigbee2mqtt and openLuup for sometime now and it is working well.
I attempted to add another Hue switch to-day. It's a newer version of the other ones I have been using so far. They are pretty much identical.
The older ones installed no problem (which is weird), but the new one won't. Looking at the code, it looks this function in L_Zigbee2MQTTBridge.lua:
configure_scene_controller(dno)is not being passed the parameter "dno" when the function is called. The device is created but is incomplete.
Just out of interest how do you pretty print to the log from within say L_Zigbee2MQTTBridge.lua? I tried a few incarnations such a:
local pretty = openLuup.loader.shared_environment.prettybut they all failed.
Originally I was using Futzle's UPnP event proxy plugin on Vera with the Sonos plugin. Worked very well.
On making the move to openLuup, one finds that the proxy can't be used because the proxy daemon start and stop, etc uses a script installed by the plugin that only works on openWRT, as used by Vera.
The Sonos plugin still works without the proxy but it reverts to polling. It becomes a bit on the sluggish side and sometimes doesn't function quite as intended.
I've modified the proxy plugin to install a script that runs as a systemd service. systemd can be found on a lot of contemporary Linux installs, including Raspberry Pis. To make use of; just install the plugin from the AltUI app store and restart the Luup engine a couple of times. The dashboard should indicate "Status: Proxy running".
Note that the service file expects "L_UPnPProxyDaemon.lua" to be located at the typical plugin files location:
/etc/cmh-ludl/After the plugin is installed, the service file should be found in:
/etc/systemd/system/as UPnPProxy.service.
If you use the Sonos plugin, you need to change the variable "UseProxy" to "1" and restart the LuupEngine. In the Sonos parent device, you should see: "Running x zones; proxy detected".
Updated doco here.
Hope it works - YMMV.
Well pretty sure I didn't change or touch anything! I've turned everything on and off again as one might hope. Excepting a total reboot of the Pi3 that's running all my stuff very reliably in openLuup.
It's all been working well for years and now all of sudden 6 second alerts are truncated to about 4 seconds. Occasionally it works as it should. I see this in the log - does it help?
2023-02-20 09:39:06.662 luup_log:0: My Lua ver 0.50 debug: executing scene 63: "Check windows doors" in room: "Watchers" 2023-02-20 09:39:06.663 luup.call_action:: 217.urn:micasaverde-com:serviceId:Sonos1.Alert 2023-02-20 09:39:06.663 luup.call_action:: action will be handled by parent: 214 2023-02-20 09:39:06.663 luup_log:0: My Lua ver 0.50 debug: rest of scene 63 was executed 2023-02-20 09:39:06.663 luup.scenes:: scene 63, Check windows doors, initiated by AltUI 2023-02-20 09:39:06.665 luup_log:214: Sonos: Alert action on device 217 URI "http://redacted:3480/www/sounds/AllClosed.mp3" duration "6" 2023-02-20 09:39:06.758 luup_log:214: Sonos: UPnP_request (Pause, urn:schemas-upnp-org:service:AVTransport:1): status=1 statusMsg=500 result=[<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body><s:Fault><faultcode>s:Client</faultcode><faultstring>UPnPError</faultstring><detail><UPnPError xmlns="urn:schemas-upnp-org:control-1-0"><errorCode>701</errorCode></UPnPError></detail></s:Fault></s:Body></s:Envelope>] 2023-02-20 09:39:06.759 luup_log:214: stack traceback: ./L_SonosSystem1.lua:265: in function 'error' ./L_SonosUPnP.lua:289: in function <./L_SonosUPnP.lua:169> (tail call): ? ./L_SonosSystem1.lua:3390: in function 'sayOrAlert' ./L_SonosSystem1.lua:3452: in function 'queueAlert' ./L_SonosSystem1.lua:3843: in function <./L_SonosSystem1.lua:3839> (tail call): ? [C]: in function 'pcall' ./openLuup/scheduler.lua:204: in function 'context_switch' ./openLuup/scheduler.lua:366: in function 'dispatch' ./openLuup/scheduler.lua:588: in function 'task_callbacks' ./openLuup/scheduler.lua:699: in function 'start' openLuup/init.lua:354: in main chunk [C]: ? 2023-02-20 09:39:06.888 luup.variable_set:: 214.urn:toggledbits-com:serviceId:SonosSystem1.zoneInfo was: {"zones":{"RINCON_000E58DC7BBE01400":{"Location":"http://redacted3:1400/xml/device_description.xml","Group":"RIN... now: {"zones":{"RINCON_000E58DC7BBE01400":{"Location":"http://redacted3:1400/xml/device_description.xml","Group":"RIN... #hooks:0 2023-02-20 09:39:06.895 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.TransportState was: STOPPED now: TRANSITIONING #hooks:0 2023-02-20 09:39:06.901 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentPlayMode was: SHUFFLE_NOREPEAT now: NORMAL #hooks:0 2023-02-20 09:39:06.913 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentTransportActions was: Set, Stop, Pause, Play, X_DLNA_SeekTime, Next, X_DLNA_SeekTrackNr now: Set, Stop, Pause, Play, X_DLNA_SeekTime, X_DLNA_SeekTrackNr #hooks:0 2023-02-20 09:39:06.921 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.NumberOfTracks was: 10 now: 1 #hooks:0 2023-02-20 09:39:06.922 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.AVTransportURI was: x-rincon-queue:RINCON_000E58DC7BBE01400#0 now: http://redacted:3480/www/sounds/AllClosed.mp3 #hooks:0 2023-02-20 09:39:11.929 luup_log:214: Sonos: UPnP_request() "urn:schemas-upnp-org:service:AVTransport:1"#"GetPositionInfo" action took 5.0073010921478s (long) 2023-02-20 09:39:11.932 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentTrackDuration was: 0:02:22 now: 0:00:00 #hooks:0 2023-02-20 09:39:11.933 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentTrackURI was: x-file-cifs://ELEPHANT1/Multimedia/My%20Music/Music%20JP/The%20Smiths/The%20Queen%20Is%20Dead/08%20Vicar%20in%20a%2... now: http://redacted:3480/www/sounds/AllClosed.mp3 #hooks:0 2023-02-20 09:39:11.934 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentTrackMetaData was: <DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r... now: <DIDL-Lite xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:upnp="urn:schemas-upnp-org:metadata-1-0/upnp/" xmlns:r... #hooks:0 2023-02-20 09:39:11.936 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentStatus was: Vicar in a Tutu: (The Smiths, The Queen Is Dead) now: AllClosed.mp3 #hooks:0 2023-02-20 09:39:11.937 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentTitle was: Vicar in a Tutu now: AllClosed.mp3 #hooks:0 2023-02-20 09:39:11.937 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentArtist was: The Smiths now: #hooks:0 2023-02-20 09:39:11.938 luup.variable_set:: 217.urn:upnp-org:serviceId:AVTransport.CurrentAlbum was: The Queen Is Dead now: #hooks:0Also see these:
2023-02-24 16:12:13.576 openLuup.server:: GET /www/sounds/YouRang.mp3 HTTP/1.1 tcp{client}: 0x17e96f0 2023-02-24 16:12:13.579 openLuup.server:: error 'closed' sending 43102 bytes to tcp{client}: 0x17e96f0So any clues?
I've got myself a nice Ecovacs Deebot 950, because one of the Roombas is getting really old (12 years and still going strong). It's my first one connected to WiFi, since the others are legacy. I've found a nice mqtt library and it's already pushing to my broker in real time, but I'm wondering if there's a generic device template and/or service, otherwise I'll start building one and I'll try to keep it as much generic as possible.
Hi,
I've installed switchboard plugin from openluup app store but I'm not sure which action to use to create a binary switch. I try "addswitch" action but I see the device only after using the "addchild" action too. is it correct ?
Attached the openluup device screen, the control switchboard and the actions i see.
tnks donato
Hi @akbooer,
I have an updated version of one of my plugins but I cannot publish it in the ALTApp Store. When I click publish it gets in a sort of loop of Refreshing Token.../Token refreshed. However, I never get to page to refresh the token.
Looking at the browser debug window I see this as the response to http://192.168.178.101:3480/data_request?id=lr_ALTUI_Handler&command=refresh_auth_token
{"error":{"code":400,"message":"Bad Request - invalid_grant","step":"Get access token from refresh token"}}
Running openLuup v21.7.25. Any suggestion?
Cheers Rene
Hi,
Sorry if I missed it but how do I update the .json file of my plugins so that I can make the text/content visible on the tile itself, via openLuup/ALTui dashboard ?
The same plugins on Vera show the content ?
Hi Patrick/AK Booer
I am able to see Reactor expressions in the AltUI UI per the below and the expressions work as they should in my reactor sensors. When an expression changes, the reactor sensor responds accordingly.
However, I cannot see the expressions in luup state variables or the luup logs:
I tried reinstalling openLuup (latest development) and when that failed to change the noted behavior, I reinstalled lua5.1. There was also no change. Rebooting the machine also produced no change.
I suspect this is an openLuup issue as I also see nil values for some plugins:
And other plugins are fine:
2022-01-12 20:47:12.027 luup.variable_set:: 63.urn:upnp-micasaverde-com:serviceId:Weather1.CurrentDewPoint was: 32 now: 29.7 #hooks:0 2022-01-12 20:47:12.028 luup.variable_set:: 63.urn:upnp-micasaverde-com:serviceId:Weather1.WindSpeed was: 1.76 now: 2.8 #hooks:0 2022-01-12 20:47:12.028 luup.variable_set:: 63.urn:micasaverde-com:serviceId:HumiditySensor1.CurrentLevel was: 30 now: 27 #hooks:0 2022-01-12 20:47:12.028 luup.variable_set:: 65.urn:micasaverde-com:serviceId:HumiditySensor1.CurrentLevel was: 30 now: 27 #hooks:0 2022-01-12 20:47:12.028 luup.variable_set:: 63.urn:upnp-micasaverde-com:serviceId:Weather1.LastUpdate was: 1642047430 now: 1642049231 #hooks:0Any ideas on how to troubleshoot this.....
I just published an update to my Virtual Devices Plug-in.
What's new in version 1.5:
support for async HTTP (out of the box on openluup, just download https://github.com/akbooer/openLuup/blob/master/openLuup/http_async.lua and copy with the plug-in files on Vera) experimental support for setpoints management in Virtual Heaters (you know, the device will turn itself off if temperature is reached, and automatically on when temperature is not beyond the setpoint) external device for temperature in Virtual Heaters (just set urn:bochicchio-com:serviceId:VirtualHeater1/TemperatureDevice variable) small fixes, stabilizationGrab your copy from https://github.com/dbochicchio/vera/tree/master/VirtualDevices
As always, 100% local, 100% apps friendly, 100% supported by Alexa (and Google Home, I guess).
This topic has come up before but I haven't seen an answer. Symptom: AltuUI says there is a new update available, so you tell it to do the update but the update does not happen. AltUI remains stuck on it's old version. On other occasions it works OK. So my version is:
AltUI v2.49.2546, © 2019AltUI says this:
a newer version #2551 of ALTUI is available, do you want to upgrade ? add scrollable dialog for long boxes bugfix: clock display on safari remote url update ( @olov ) update jquery and bootstrap versions credential to camera device url ( @rafale77 ) ignore Ezlo hub ( @reneboer)Track through the JavaScript and find that this issues the update command:
function _triggerAltUIUpgrade(newversion,newtracnum) { var url = '?id=action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=CreatePlugin&PluginNum=8246&Version={1}&TracRev={0}'.format(newversion,newtracnum); return _httpGet(url,{}).always( function() { PageMessage.message(_T("Upgrade Request succeeded, a Luup reload will happen"),"success"); }); };And the url variable equals:
url: "?id=action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=CreatePlugin&PluginNum=8246&Version=40628&TracRev=2551"All looks good so far. I manually issue the same url complete with my openLuup ip_address in a local browser. Update fails - looks like AltUI is doing as it should:
http://ip_address:3480/data_request?id=action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=CreatePlugin&PluginNum=8246&Version=40628&TracRev=2551In openLuup I see:
2021-12-06 13:56:14.821 luup_log:3: ALTUI: startupDeferred, called on behalf of device:3 2021-12-06 13:56:14.838 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.Version was: v2.49 now: v2.49 #hooks:0And then later:
2021-12-06 13:55:58.256 openLuup.server:: GET /data_request?id=action&serviceId=urn:micasaverde-com:serviceId:HomeAutomationGateway1&action=CreatePlugin&PluginNum=8246&Version=40628&TracRev=2551 HTTP/1.1 tcp{client}: 0x25712a8 2021-12-06 13:55:58.257 luup.call_action:: 0.urn:micasaverde-com:serviceId:HomeAutomationGateway1.CreatePlugin 2021-12-06 13:55:58.259 luup.call_action:: 4.urn:upnp-org:serviceId:AltAppStore1.update_plugin 2021-12-06 13:55:58.260 luup_log:4: AltAppStore : starting <run> phase... 2021-12-06 13:55:58.262 luup_log:4: AltAppStore : downloading amg0/ALTUI [2551] to trash/AltAppStore/ 2021-12-06 13:55:58.262 luup_log:4: AltAppStore : GitHub request: https://api.github.com/repos/amg0/ALTUI/contents?ref=2551 2021-12-06 13:55:58.760 luup_log:4: AltAppStore : GitHub request: https://api.github.com/repos/amg0/ALTUI/contents/blockly?ref=2551 2021-12-06 13:55:59.543 luup_log:4: AltAppStore : getting contents of version: 2551 2021-12-06 13:55:59.544 luup.variable_set:: 4.urn:upnp-org:serviceId:altui1.DisplayLine1 was: AltAppStore now: Downloading... #hooks:0 2021-12-06 13:55:59.544 luup.variable_set:: 4.urn:upnp-org:serviceId:altui1.DisplayLine2 was: now: Alternate UI #hooks:0 2021-12-06 13:55:59.544 luup_log:4: AltAppStore : scheduling <job> phase... 2021-12-06 13:55:59.544 openLuup.requests:: 2021-12-06 13:55:59.545 openLuup.server:: request completed (148 bytes, 1 chunks, 1288 ms) tcp{client}: 0x25712a8 2021-12-06 13:55:59.554 openLuup.server:: request completed (6233 bytes, 1 chunks, 16442 ms) tcp{client}: 0x255e680 2021-12-06 13:55:59.555 luup_log:4: AltAppStore : ...final <job> phase 2021-12-06 13:55:59.555 luup_log:4: AltAppStore : Total size 0.000 (kB) 2021-12-06 13:55:59.555 luup.variable_set:: 4.urn:upnp-org:serviceId:altui1.DisplayLine2 was: Alternate UI now: Alternate UI 100% #hooks:0 2021-12-06 13:55:59.555 luup_log:4: AltAppStore : updating icons in icons/ ... 2021-12-06 13:55:59.555 luup_log:4: AltAppStore : updating device files in ./ ... 2021-12-06 13:55:59.556 luup_log:4: AltAppStore : ... 0 icon files 2021-12-06 13:55:59.556 luup_log:4: AltAppStore : ... 0 device files 2021-12-06 13:55:59.556 luup_log:4: AltAppStore : Alternate UI update completed 2021-12-06 13:55:59.556 openLuup.luup:: device 4 'Alternate App Store' requesting reload 2021-12-06 13:55:59.556 luup.reload:: saving user_data 2021-12-06 13:56:00.262 openLuup.luup:: exiting with code 42 - after 0.3 hoursAll looks OK. Then I check GitHub. It shows the latest changes to the version 2551. However this page says the latest version is 2550.
So I wondering what's going on. Seems the latest version number is not being picked by the installer? (not sure how it works.) Is it possible for openLuup to log a bit more about the version it's trying to install. As this call returns.
https://api.github.com/repos/amg0/ALTUI/contents?ref=2551 message "No commit found for the ref 2551" documentation_url "https://docs.github.com/v3/repos/contents/"But this works fine:
https://api.github.com/repos/amg0/ALTUI/contents?ref=2550So it looks like AMG0 doesn't always update the repository with whatever is needed to get this to work (I imagine that's easy to forget). But could openLuup send back a fail result to AltUI and AltUI pick that up? Currently it looks like AltUI always assumes everything went OK. Or somehow; could openLuup log and/or notify the user what went wrong?
Hi @toggledbits and others,
Could you help me out with the following use case? I have a z-wave module that doesn't have scene functionality, but I want to trigger a double click action on the switch.
What is the easiest way to do this in reactor? I'm struggling with this and I think I'm thinking too complex at this point.
Well, I disappeared down a rabbit hole on a different mission and resurfaced with this monstrosity.
What does it do?
It translates button functions for various (certainly not all) IRP protocols to Pronto codes. These can then be sent by a plugin that sends Pronto Codes to IR transmitters - such as the BroadLink Plugin or the GC100 Plugin (or similar).
The IRP protocol "Device", "Subdevice" and "Function" numbers are stored in a json file as buttons for "virtual remotes".
So you could have say three physical IR transmitters and want to command different AV devices (ie TVs, AVR, Xmas tree, etc) in the vicinity of those various IR emitters.
The button codes are far less cumbersome than heaps of pronto codes. You can set up a virtual remote for each AV device in the json file. Each physical emitter can be assigned to any virtual remote. And away you go!
Well - you already have a pile of pronto codes already running just fine? However, as the plugin "manufacturers" pronto codes, you could also use it to scan/search for functions for any AV device you may have. GitHub has an example for Pioneer: SearchForButtonCodes.lua
Find "Device", "Subdevice" and "Function" codes:
Plugin details in:
Install via AltUI:
Version 0.51
Initial release.
Version 0.52
Add RC6 format: includes Windows Media Center based items eg Intel NUCs, Xboxes, Kodi, etc
@toggledbits Hi Patrick. I had my internet go down for about 12 hours the other day, and that experience encouraged me to work on getting my HA off the cloud to the extent that I can. I have not converted my Veras to local devices yet, though after the next VeraPlus stable firmware release, I will probably run your scripts to localize the device as I don't see Ezlo surviving to maintain Vera firmware.
My question concerns the icons in your plugins. While attempting to mod a reactor sensor during the outage, I could not really do anything (without a sense of risk anyway) as the icons used are pulled from your website. Many Vera plugins operate this way--no doubt to save space on the vera, and my inclination was to manually start downloading what I needed when the outage was over. I run everything on openLuup and space is not an issue. It occurred to me that localizing a plugin could be a button push somewhere in the plugin UI where one could auto download any needed icons and the plugin would recognize the local copy first, before trying the cloud.
Could this be a possible enhancement to your plugins? I don't really have a technical grasp of whether this would be workable or not.
Feedback / solutions for openLuup's built-in Tasmota MQTT bridge.
openLuup: Shelly Bridge plugin
-
@akbooer is there any chance on you decoupling the tasmota and shelly bridges from openLuup. I'm asking because if the bridges were stand alone plugins, they could be used as quasi templates for other MQTT devices. For example, my BlueIris server MQTT messaging now maps to individual Vera devices that represent BlueIris cameras (created with the Tasmota bridge), but the functionality of each vera device is limited, due to the way in which the tasmota bridge creates its child devices. With a stand alone plugin, I could revise a clone of the plugin to include more specific functionality for a given MQTT source.
Everything MQTT wise works well now, so no real need to do this, but it strikes me that it would be a cleaner approach to handling MQTT in openLuup and the myriad IOT devices that will make use of the protocol.
-
They're closely coupled so that they can auto-install if any of their devices are detected, rather than having to download a bridge plugin separately. As such, I consider them to be an integral part of the system (a change, certainly, from my previous device-agnostic approach, but part of my personal move away from ZWave.)
The MQTT bridge functionality is totally general, and I would have thought that this was a better place to start.
...or am I missing your point, here?
-
@archers said in openLuup: Shelly Bridge plugin:
@akbooer top notch service as always! Hopefully you will get good use of it also.
Well, we'll see (the device arrived yesterday)...
Latest development version of openLuup (v21.11.2) has an initial attempt to service the Dimmer2 device:
- inputs are handled exactly as the switch device – so, essentially, as a scene controller showing the latest activated scene: short press; long press; etc... This should work for both input switches (if you have any with two.)
- on/off button on the control panel should work for the dimmer bulb.
- slider control is not yet implemented.
...my current issue is that, although I now have the Shelly Dimmer2 device, I don't have any dimmable bulbs! Everything I have is LED, and they're either non-dimmable or smart devices anyway. In particular, I can't tell whether the power and Watts parameters work correctly for the dimmer.
So I'd appreciate a listing of any bugs that you find, and I'll continue to work on the slider control.
Incidentally, I've update to the latest firmware for this device:
20210909-150154/v1.11.4-DNSfix-ge6b2f6d
since it came with a very old version that didn't even publish the model number. It seems to work fine, but I've not updated any other of my devices. -
@akbooer It's just easier to understand the code/ what's occurring in a plugin as opposed to openLuup, mainly because of the typical plugin structure and its place on top of the openLuup subsystem. That's probably a trivial distinction to you, but for me it's a huge difference in understanding as I'm not in any way fluent with the inside baseball of the OLuup object model.
Per your MQTT comment, though it can be done (https://github.com/jziolkowski/tdm), it would be difficult to have functional device bridges if you took away MQTT, as you'd have to interrogate a router in some fashion to find out if these devices exist on one's network, and then use http commands to control the devices. So I see MQTT handling as more an innate part of the OL subsystem, like http, than a device profile like tasmota or shelly, device profiles that are typically handled as stand alone plugins.
-
@akbooer said in openLuup: Shelly Bridge plugin:
Well, we'll see (the device arrived yesterday)...
Latest development version of openLuup (v21.11.2) has an initial attempt to service the Dimmer2 device:inputs are handled exactly as the switch device – so, essentially, as a scene controller showing the latest activated scene: short press; long press; etc... This should work for both input switches (if you have any with two.)
on/off button on the control panel should work for the dimmer bulb.
slider control is not yet implemented....my current issue is that, although I now have the Shelly Dimmer2 device, I don't have any dimmable bulbs! Everything I have is LED, and they're either non-dimmable or smart devices anyway. In particular, I can't tell whether the power and Watts parameters work correctly for the dimmer.
So I'd appreciate a listing of any bugs that you find, and I'll continue to work on the slider control.
Incidentally, I've update to the latest firmware for this device: 20210909-150154/v1.11.4-DNSfix-ge6b2f6d since it came with a very old version that didn't even publish the model number. It seems to work fine, but I've not updated any other of my devices.@akbooer thank you for the effort, I installed v21.11.2 and have tested this a bit.
For a start I have my switch connected to "sw 1". It is a single button switch, defined as a "one button mode" in the Shelly GUI.
"sw 1" seems to report as "light/0" in the Mqtt message.It does not work fully in OpenLuup yet, below I list what I have found.
Turning on/off with the physical switch:
-
The status in AltUI does change when turning the light on and off.
-
When I turn the light "off" with the physical switch I have:
light/0:
off
light/0/status:{"ison":false,"source":"input","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":80}
-
When I turn the light "on" with the physical switch (at 80%) I have:
light/0:
on
light/0/status:
{"ison":true,"source":"input","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":80}
Turning the light on/off in AltUI:
-
The light does not turn on/off when I turn it on/off in AltUI.
-
When I turn it "on" in AltUI I have:
light/0:
off
light/0/status:
{"ison":false,"source":"input","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":80}
relay/0/command:
on
-
When I turn it "off" in AltUI I have:
light/0:
off
light/0/status:
{"ison":false,"source":"input","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":80}
relay/0/command:
off
When I turn it "on" in AltUI it looks like this:
When I turn on the light with the physical switch it looks like this:
In Mqtt Explorer I have the following:
Light on (i.e. turned on with the physical switch):
Light off (i.e. turned off with the physical switch):
Turning on in AltUI (but light off):
Turning off in AltUI (light still off):
The "relay/0/command" command that is sent from AltUI does in other words not to give any effect on the Shelly device. In fact with a fresh Mqtt Explorer session it only emerges when turning on/off in AltUI.
Hopefully this gives some hints to what is wrong. Let me know if you need more information.
@akbooer said in openLuup: Shelly Bridge plugin:
...my current issue is that, although I now have the Shelly Dimmer2 device, I don't have any dimmable bulbs! Everything I have is LED, and they're either non-dimmable or smart devices anyway. In particular, I can't tell whether the power and Watts parameters work correctly for the dimmer.
Dimmable LED lights are a bit tricky still. Some of them work and some of then do not work very well. It can be a bit of a pain to find good ones. The upside is that the Shelly dimmer can be changed from trailing and leading edge dimming (under "Calibration"). This should hopefully mean that it can be a little bit better to adapt to different lights.
@akbooer said in openLuup: Shelly Bridge plugin:
Incidentally, I've update to the latest firmware for this device: 20210909-150154/v1.11.4-DNSfix-ge6b2f6d since it came with a very old version that didn't even publish the model number. It seems to work fine, but I've not updated any other of my devices.
Excellent news that the latest FW seems to work, I will test it later on one of my devices.
-
-
Can you give latest development (v21.11.8) a try?
I don't think I'm quite there yet, but the dimmer control should work to some extent.
This is surprisingly hard, since the status/control aspect of the Shelly dimmer is not quite the same as that of a ZWave one... I've always hated the way that Vera handled dimmers anyway! But I'm doing the best I can.
-
@akbooer said in openLuup: Shelly Bridge plugin:
Can you give latest development (v21.11.8) a try?
I don't think I'm quite there yet, but the dimmer control should work to some extent.
This is surprisingly hard, since the status/control aspect of the Shelly dimmer is not quite the same as that of a ZWave one... I've always hated the way that Vera handled dimmers anyway! But I'm doing the best I can.I installed v21.11.8 and now it almost seem to work.
In short what is not entirely in place is that the dimmer slider on the AltUI desktop in some cases does not follow the set value.
Example:
When I change the dim value in the Shelly GUI it updates in OpenLuup inside the dimmer but the slider on the desktop does not update.Starting with the dimmer off and all sliders on 1% and then dim to 40% on the Shelly GUI gives:
Inside the dimmer controller in AltUI:
light/0/status:
{"ison":true,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":40}
If I instead change the dim value from AltUI either from inside the dimmer controller or from the desktop it works and everything is updated. Also the slider inside the AltUI dimmer seems to work as it should.
Let me know if you need more information.
Based on your input I tested the latest fw (v1.11.4) on a Shelly Plug and it does indeed seem to work with Mqtt. Great news that it actually works now.
-
@therealdb said in openLuup: Shelly Bridge plugin:
this should be related to target/status variables (in this case loadleveltarget).
Thanks, yes, indeed it's something like that.
The curious this is that the AltUI dimmer controls work differently from each other, so this rather looks like a 'feature' of AltUI.
As far as I can tell from the openLuup side of things, it's working as it should. The nasty hack is to allow the status to override the target, but that brings other side-effects. It's usually more of an issue if there is a slow ramp involved too.
I hate dimmers.
-
@akbooer It's been awhile but I thought I would try out a gen2 Shelly Plus H&T. It's a nice looking device.
The openLuup Shelley bridge has some initial support for Gen2 devices but I encountered quite a few show stoppers. The gen2 devices use different topics and Remote Procedure Calls (RPC) seem to be the new direction. I can go into that further but I thought this would be a starting point:
With the log below; openLuup and the Shelly don't know about each other as yet and I get this RX error every time the Shelly publishes an event. I have no idea why. The Shelley device spits out event info unprompted, as it lets the world know of its status. I see this in MQTT explorer:
openLuup zigbee2mqtt $SYS shellyplusht-80646fc9b46d online = true events rpc = { "src": "shellyplusht-80646fc9b46d", "dst": "shellyplusht-80646fc9b46d/events", "method": "NotifyFullStatus", "params": { "ts": 1.49, "ble": {}, "cloud": { "connected": false }, "devicepower:0": { "id": 0, "battery": { "V": 0.43, "percent": 0 }, "external": { "present": true } }, "ht_ui": {}, "humidity:0": { "id": 0, "rh": 51.8 }, "mqtt": { "connected": true }, "sys": { "mac": "<mac address>", "restart_required": false, "time": null, "unixtime": null, "uptime": 1, "ram_size": 246868, "ram_free": 167952, "fs_size": 458752, "fs_free": 176128, "cfg_rev": 11, "kvs_rev": 0, "webhook_rev": 0, "available_updates": {}, "wakeup_reason": { "boot": "deepsleep_wake", "cause": "status_update" }, "wakeup_period": 600 }, "temperature:0": { "id": 0, "tC": 21.9, "tF": 71.5 }, "wifi": { "sta_ip": "<ip address>", "status": "got ip", "ssid": "<sid>", "rssi": -67 }, "ws": { "connected": false } } }
And the log looks like this:
2023-12-20 13:32:14.259 openLuup.io.server:: MQTT:1883 connection from <ip address> tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.261 openLuup.mqtt:: CONNECT tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.261 openLuup.mqtt:: ClientId: shellyplusht-80646fc9b46d 2023-12-20 13:32:14.261 openLuup.mqtt:: WillTopic: shellyplusht-80646fc9b46d/online 2023-12-20 13:32:14.261 openLuup.mqtt:: WillMessage: false 2023-12-20 13:32:14.261 openLuup.mqtt:: UserName: **** 2023-12-20 13:32:14.261 openLuup.mqtt:: Password: **** 2023-12-20 13:32:14.262 openLuup.mqtt:: CONNACK ack 2023-12-20 13:32:14.273 openLuup.mqtt:: SUBSCRIBE tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.273 openLuup.mqtt:: Packet Id: 0x0001 2023-12-20 13:32:14.273 openLuup.mqtt:: Topic: shellyplusht-80646fc9b46d/rpc 2023-12-20 13:32:14.273 openLuup.mqtt:: SUBACK ack 2023-12-20 13:32:14.274 openLuup.mqtt:: shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/rpc tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.279 openLuup.mqtt:: SUBSCRIBE tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.279 openLuup.mqtt:: Packet Id: 0x0002 2023-12-20 13:32:14.279 openLuup.mqtt:: Topic: shellyplusht-80646fc9b46d/command/sys 2023-12-20 13:32:14.280 openLuup.mqtt:: SUBACK ack 2023-12-20 13:32:14.280 openLuup.mqtt:: shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/command/sys tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.282 openLuup.mqtt:: SUBSCRIBE tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.282 openLuup.mqtt:: Packet Id: 0x0003 2023-12-20 13:32:14.282 openLuup.mqtt:: Topic: shellyplusht-80646fc9b46d/command 2023-12-20 13:32:14.282 openLuup.mqtt:: SUBACK ack 2023-12-20 13:32:14.283 openLuup.mqtt:: shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/command tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.285 openLuup.mqtt:: SUBSCRIBE tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.285 openLuup.mqtt:: Packet Id: 0x0004 2023-12-20 13:32:14.285 openLuup.mqtt:: Topic: shellies/command 2023-12-20 13:32:14.285 openLuup.mqtt:: SUBACK ack 2023-12-20 13:32:14.285 openLuup.mqtt:: shellyplusht-80646fc9b46d SUBSCRIBE to shellies/command tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.287 openLuup.mqtt:: PUBLISH tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.288 openLuup.mqtt:: PUBACK ack 2023-12-20 13:32:14.290 openLuup.mqtt:: PUBLISH tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.290 openLuup.mqtt:: PUBACK ack 2023-12-20 13:32:14.293 openLuup.mqtt:: PUBLISH tcp{client}: 0x559e2a9768 2023-12-20 13:32:14.293 openLuup.mqtt:: PUBACK ack 2023-12-20 13:32:16.280 openLuup.mqtt:: PUBLISH tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.281 openLuup.mqtt:: PUBACK ack 2023-12-20 13:32:16.775 openLuup.io.server:: MQTT:1883 connection closed tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.775 openLuup.mqtt:: RECEIVE ERROR: (Fixed Header byte) closed tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.775 openLuup.mqtt:: shellyplusht-80646fc9b46d UNSUBSCRIBE from shellyplusht-80646fc9b46d/rpc tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.776 openLuup.mqtt:: shellyplusht-80646fc9b46d UNSUBSCRIBE from shellyplusht-80646fc9b46d/command tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.776 openLuup.mqtt:: shellyplusht-80646fc9b46d UNSUBSCRIBE from shellyplusht-80646fc9b46d/command/sys tcp{client}: 0x559e2a9768 2023-12-20 13:32:16.776 openLuup.mqtt:: shellyplusht-80646fc9b46d UNSUBSCRIBE from shellies/command tcp{client}: 0x559e2a9768
Looks like openLuup is expecting more but the Shelley device is all done?
I looked around mqtt.lua but the only thing that I thought may be incorrect is line 201:
for i = 0, 2 do -- maximum of 3 bytes encode remaining length, LSB first
As I understand it, the protocol is 4 bytes here, not three, so the for loop is short by one. However, this wouldn't be found out, unless your mqtt message was more than 2 megabytes long, so not likely to be encountered any time soon.
-
Thanks for the error report. Not surprising, since, as you say, there is only limited support for the new Shellys. I've just added them on an as-needed basis, and I don't have that device (looks interesting, though!)
@a-lurker said in openLuup: Shelly Bridge plugin:
I looked around mqtt.lua but the only thing that I thought may be incorrect is line 201:
for i = 0, 2 do -- maximum of 3 bytes encode remaining length, LSB first
No, this is not an error. The initial fixed-header byte is picked up in line 196:
local fixed_header_byte1, err = client: receive (1)
I'll look into this further and get back to you.
AK
-
I added a one line of logging after line 296 & 297 like so:
function MQTT_packet.PUBLISH (TopicName, ApplicationMessage, control_flags) -- publish to MQTT client socket (with QoS = 0) _log ('Topic: '..TopicName..' ApplicationMessage: '..ApplicationMessage)
and here is the log edited to show the action:
CONNECT tcp{client}: 0x55a8931288 ClientId: shellyplusht-80646fc9b46d WillTopic: shellyplusht-80646fc9b46d/online WillMessage: false UserName: **** Password: **** CONNACK ack SUBSCRIBE tcp{client}: 0x55a8931288 Packet Id: 0x0001 Topic: shellyplusht-80646fc9b46d/rpc SUBACK ack shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/rpc tcp{client}: 0x55a8931288 SUBSCRIBE tcp{client}: 0x55a8931288 Packet Id: 0x0002 Topic: shellyplusht-80646fc9b46d/command/sys SUBACK ack shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/command/sys tcp{client}: 0x55a8931288 SUBSCRIBE tcp{client}: 0x55a8931288 Packet Id: 0x0003 Topic: shellyplusht-80646fc9b46d/command SUBACK ack shellyplusht-80646fc9b46d SUBSCRIBE to shellyplusht-80646fc9b46d/command tcp{client}: 0x55a8931288 SUBSCRIBE tcp{client}: 0x55a8931288 Packet Id: 0x0004 Topic: shellies/command SUBACK ack shellyplusht-80646fc9b46d SUBSCRIBE to shellies/command tcp{client}: 0x559c9277e8 PUBLISH tcp{client}: 0x559c9277e8 PUBACK ack Topic: shellyplusht-80646fc9b46d/online ApplicationMessage: true Topic: shellyplusht-80646fc9b46d/online ApplicationMessage: true PUBLISH tcp{client}: 0x559c9277e8 PUBACK ack Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyFullStatus","params":{"ts":1.45,"ble":{},"cloud":{"connected":false},"devicepower:0":{"id": 0,"battery":{"V":0.43, "percent":0},"external":{"present":true}},"ht_ui":{},"humidity:0":{"id": 0,"rh":54.7},"mqtt":{"connected":true},"sys":{"mac":"80646fc9b46d","restart_required":false,"time":null,"unixtime":null,"uptime":1,"ram_size":246864,"ram_free":167876,"fs_size":458752,"fs_free":176128,"cfg_rev":11,"kvs_rev":0,"webhook_rev":0,"available_updates":{},"wakeup_reason":{"boot":"deepsleep_wake","cause":"status_update"},"wakeup_period":600},"temperature:0":{"id": 0,"tC":23.2, "tF":73.7},"wifi":{"sta_ip":"<ip_address>","status":"got ip","ssid":"<ssid>","rssi":-66},"ws":{"connected":false}}} Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyFullStatus","params":{"ts":1.45,"ble":{},"cloud":{"connected":false},"devicepower:0":{"id": 0,"battery":{"V":0.43, "percent":0},"external":{"present":true}},"ht_ui":{},"humidity:0":{"id": 0,"rh":54.7},"mqtt":{"connected":true},"sys":{"mac":"80646fc9b46d","restart_required":false,"time":null,"unixtime":null,"uptime":1,"ram_size":246864,"ram_free":167876,"fs_size":458752,"fs_free":176128,"cfg_rev":11,"kvs_rev":0,"webhook_rev":0,"available_updates":{},"wakeup_reason":{"boot":"deepsleep_wake","cause":"status_update"},"wakeup_period":600},"temperature:0":{"id": 0,"tC":23.2, "tF":73.7},"wifi":{"sta_ip":"<ip_address>","status":"got ip","ssid":"<ssid>","rssi":-66},"ws":{"connected":false}}} PUBLISH tcp{client}: 0x559c9277e8 PUBACK ack Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyStatus","params":{"ts":1.45,"mqtt":{"connected":true}}} Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyStatus","params":{"ts":1.45,"mqtt":{"connected":true}}} PUBLISH tcp{client}: 0x559c9277e8 PUBACK ack Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyEvent","params":{"ts":1703301404.25,"events":[{"component":"sys", "event":"sleep", "ts":1703301404.25}]}} Topic: shellyplusht-80646fc9b46d/events/rpc ApplicationMessage: {"src":"shellyplusht-80646fc9b46d","dst":"shellyplusht-80646fc9b46d/events","method":"NotifyEvent","params":{"ts":1703301404.25,"events":[{"component":"sys", "event":"sleep", "ts":1703301404.25}]}} MQTT:1883 connection closed tcp{client}: 0x559c9277e8 openLuup.mqtt:: RECEIVE ERROR: (Fixed Header byte) closed tcp{client}: 0x559c9277e8
Every 5 minutes the Shelly come on line, sends some status and finally sends the sleep mode event then goes into sleep mode. This would close the connection to the openLuup server. So I'm wondering if openLuup is checking for a "PUBACK" at this time and that's an issue? Might also be a QoS level mix up as well; eg "PUBACK" is not needed. Or the Shelly is going to sleep too early.
I'm still trying to understand how this all works and in what direction information is being sent eg is "PUBACK" been sent or received by openLuup. A few <-- arrows might be good --> eg incoming and outgoing.
And why does my log code line, log the same information twice in a row. I see it does this also for my Zigbee MQTT devices, which work fine. If openLupp is publishing one of its own internal variables the log only shows it once.