Home Automation means you have to have a way of describing the logical steps you want your home to implement automatically.
Whilst I've always been a fan of the Lua language, as used in Vera (and openLuup) for scenes and plugins, it's perhaps not ideal. For this reason, there has been a long development history of plugins with their own "language" to help define the automation logic: PLEG (for those with a long memory), AltUI workflows, Rules Engine, Reactor, MSR, ...
It's always seemed to me that the 'best' way of describing logic would be a language designed for that purpose – a "logic programming language". Perhaps one of the most famous, and venerable, is Prolog, which had its fiftieth birthday last year in 2022.
Thanks to some relatively recent research A Hitchhiker’s Guide to Reinventing a Prolog Machine, Paul Tarau (2017) it's become possible to implement a very efficient Prolog engine in a reasonably concise way. So, just for fun, I'm developing a CGI plugin for describing openLuup actions in Prolog.
I have an early prototype running (written in Lua, of course). It presents a web page which looks like a fairly typical Interactive Development Environment (IDE) and contains some primitives which allow basic access to the Luup engine.
Screenshot 2023-03-10 at 18.27.33.png
In a subsequent post, I'll give a glimpse of its capabilities...
On start up the log indicates the following:
2023-12-19 10:17:12.588 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","LoadLevelTarget","",209) old value "" 2023-12-19 10:17:12.589 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","LoadLevelTarget","",209) old value "" 2023-12-19 10:17:12.589 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","LoadLevelStatus","",209) old value "" 2023-12-19 10:17:12.589 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","LoadLevelLast","",209) old value "" 2023-12-19 10:17:12.589 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","TurnOnBeforeDim","",209) old value "" 2023-12-19 10:17:12.590 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:upnp-org:serviceId:Dimming1","AllowZeroLevel","",209) old value "" 2023-12-19 10:17:12.590 luup_log:209: VirtualDevices[3.0-beta7@209](setVar@104):setVar("urn:bochicchio-com:serviceId:VirtualBinaryLight1","SetBrightnessURL","",209) old value "" 2023-12-19 10:17:12.590 luup_log:209: VirtualDevices[3.0-beta7@209](initializeMqtt@421):initializeMqtt(209,{ PowerStatusOff={ Value="0", Service="urn:upnp-org:serviceId:SwitchPower1", Variable="Status" }, BrightnessValue={ Variable="LoadLevelStatus", Service="urn:upnp-org:serviceId:Dimming1" }, PowerStatusOn={ Value="1", Service="urn:upnp-org:serviceId:SwitchPower1", Variable="Status" } }) - openLuup: true 2023-12-19 10:17:12.591 luup_log:209: VirtualDevices[3.0-beta7@209](subscribeToMqtt@414):subscribeToMqtt(209,nil,{ deviceID=209, opts={ Value="0", Service="urn:upnp-org:serviceId:SwitchPower1", Variable="Status" } }) 2023-12-19 10:17:12.591 openLuup.context_switch:: ERROR: [dev #209] ./L_VirtualLibrary.lua:415: attempt to concatenate field 'topic' (a nil value) 2023-12-19 10:17:12.591 openLuup.scheduler:: job aborted : ./L_VirtualLibrary.lua:415: attempt to concatenate field 'topic' (a nil value)The MQTT variables are all set to "skip":
MQTT_BrightnessValue
MQTT_PowerStatusOff
MQTT_PowerStatusOn
However it looks like the code doesn't check for "skip" and executes the functions initializeMqtt() and subscribeToMqtt() disappearing into the weeds at that point as there is nothing to subscribe to.
It would also be good if the code treated an empty string in the same way as it uses the key word "skip". It's not obvious that "skip" needs to be explicitly used.
I still use Vera controllers in combination with ReactorSensors. I have several Reactor sensors in use to retrieve weather data from Wunderground (i have a personal weather station), my smartmeter etc.
Recently I installed solar panels with a SolarEdge inverter. SolarEdge has an API to retrieve my power production data from their cloud.
Output is in json.
So I created a new Reactor Sensor. Connection is working (query okay).
But I encounter problems at the Value Expressions. Either I get ""query okay" but no data or I get "query okay but 1 expressions failed"
This is the json output
{"overview":{"lastUpdateTime":"2023-05-12 10:45:57","lifeTimeData":{"energy":476310.0,"revenue":216.577},"lastYearData":{"energy":433001.0},"lastMonthData":{"energy":433001.0},"lastDayData":{"energy":8262.0},"currentPower":{"power":5647.0},"measuredBy":"INVERTER"}}So it has different layers/levels.
I tried to put in the Value Expressions field several combinations to get the energy data of today (8262.0), like:
response.lastDayData.energy
response.overview.lastDayData.energy
response.overview.lastUpdateTime.lastDayData.energy
all fail...
Who can help me with this ?
I have the following issue: In my Vera, I have created a dimmer using the Switchboard plugin. I want this light always turn on at 100% brightness when turn the light on. By default, the dimmer remembers its last used setting. I have created the following scene: when the light is turned off, the LoadLevelLast should be 100.
9937e326-2453-43bd-bd32-917803b38e90-image.png
Manually, this works through the test Luup code (Lua), but not through the scene's action by execute the following Luup code.
I also tried in MSR, but no result
Does anyone know the solution to this?
Just seen notification to Netatmo developers that the current password-based login is being disabled as from October.
Oath2 is now a requirement for apps needing access to Netatmo. This will require some changes to my venerable plug-in. I’m not sure how easy this will be with the current libraries in use.
Does anyone out there use the Netatmo plug-in?
Does anyone have any advice on using Oath2?
Hardly a big deal, and likely user error. Bare metal install on Debian Bullseye
Observed behaviour:
TTS announcements are made with the correct volume. So a message to group 'Everywhere' with Volume 40 is announced. Asking an individual echo device to state its volume after the announcement gets the response 'This device is at volume 4'
So far so good.
Using the:
x_vera_svc_bochicchio_com_VeraAlexa1.SetVolumeIn an MSR reaction appears to have no impact when either applied to the group 'Everywhere' or a specific device.
So executing this reaction:
Screenshot 2023-01-31 at 09.17.40.png
Is acknowledged by the device (with a 'beep') and shows the Lua Log below:
2023-01-31 09:21:45.778 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x5572399831f8 2023-01-31 09:21:45.779 openLuup.server:: GET /data_request?GroupZones=Office&DesiredVolume=10&DeviceNum=22&id=action&serviceId=urn%3Abochicchio-com%3AserviceId%3AVeraAlexa1&action=SetVolume&output_format=json&_r=1675156905777 HTTP/1.1 tcp{client}: 0x5572399831f8 2023-01-31 09:21:45.780 luup.call_action:: 22.urn:bochicchio-com:serviceId:VeraAlexa1.SetVolume 2023-01-31 09:21:51.670 luup.variable_set:: 22.urn:bochicchio-com:serviceId:VeraAlexa1.LatestResponse was: sending cmd:speak:<s>Volume Set</s><break time="0s" /> to dev:Office type:A32DOYMUN6DTXA serial:G090U50991550NLS cu... now: sending cmd:vol:10 to dev:Office type:A32DOYMUN6DTXA serial:G090U50991550NLS customerid:A1CVTZEBJIUFJI #hooks:0 2023-01-31 09:21:51.671 openLuup.server:: request completed (35 bytes, 1 chunks, 5891 ms) tcp{client}: 0x5572399831f8 2023-01-31 09:21:51.683 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x5572399831f8 2023-01-31 09:21:51.685 openLuup.server:: request completed (930 bytes, 1 chunks, 42818 ms) tcp{client}: 0x557239726708 2023-01-31 09:21:51.687 openLuup.server:: request completed (930 bytes, 1 chunks, 42548 ms) tcp{client}: 0x5572392c0fd8 2023-01-31 09:21:51.688 openLuup.server:: request completed (930 bytes, 1 chunks, 12501 ms) tcp{client}: 0x5572392c7f88 2023-01-31 09:21:51.692 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x5572392c7f88 2023-01-31 09:21:51.704 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x557239be10b8 2023-01-31 09:21:51.704 openLuup.server:: GET /data_request?id=status&Timeout=15&DataVersion=66666322&MinimumDelay=50&output_format=json&_r=1675156911703 HTTP/1.1 tcp{client}: 0x557239be10b8 2023-01-31 09:21:51.905 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=66666322&Timeout=60&MinimumDelay=1500&_=1675022474387 HTTP/1.1 tcp{client}: 0x5572392c0fd8 2023-01-31 09:21:53.042 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=66666322&Timeout=60&MinimumDelay=1500&_=1675079237873 HTTP/1.1 tcp{client}: 0x557239726708However direct interrogation of the device reveals the volume has not changed.
I assume I'm doing something wrong or not understanding how this is meant to work?
One other observation is that messages announce to the 'Everywhere' group appear to make the volume 'stick' where as messages to an individual device appear to revert to the previous volume setting.
My expectation would be analagous to a radio i.e. the volume stays as it was last set, but happy to be corrected.
TIA!
C
Anyone else seeing issues with Vera TTS? All was working fine. I assumed the cookie had expired, but even having replaced it, and seeing that the .alexa.login file is aging (as I'd expect) No speech.
I seem to be getting an odd timeout but no idea from where.
Debian Bullseye, bare metal
Good call from this morning:
2023-01-18 08:22:51.657 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x563e8a2345e8 2023-01-18 08:22:51.667 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x563e89df13d8 2023-01-18 08:22:51.668 openLuup.server:: GET /data_request?id=status&Timeout=15&DataVersion=31085221&MinimumDelay=50&output_format=json&_r=1674030171666 HTTP/1.1 tcp{client}: 0x563e89df13d8 2023-01-18 08:22:58.223 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x563e8a4ab388 2023-01-18 08:22:58.223 openLuup.server:: GET /data_request?Text=Rachel%20has%20arrived%20at%20Washtec&Language=en-GB&GroupZones=Everywhere&Volume=50&DeviceNum=22&id=action&serviceId=urn%3Abochicchio-com%3AserviceId%3AVeraAlexa1&action= Say&output_format=json&_r=1674030178221 HTTP/1.1 tcp{client}: 0x563e8a4ab388 2023-01-18 08:22:58.224 luup.call_action:: 22.urn:bochicchio-com:serviceId:VeraAlexa1.Say 2023-01-18 08:22:58.224 luup_log:22: VeraAlexa: addToQueue: added to queue for 22 2023-01-18 08:23:09.379 luup.variable_set:: 22.urn:bochicchio-com:serviceId:VeraAlexa1.LatestResponse was: sending cmd:speak:<s><lang xml:lang="en-UK"><amazon:domain name="conversational">The temperature outside is -3 degr... now: sendi ng cmd:speak:<s>Rachel has arrived at Washtec</s><break time="0s" /> to dev:Everywhere type:A3C9PE6TNYLTCH ser... #hooks:0 2023-01-18 08:23:09.381 openLuup.server:: request completed (29 bytes, 1 chunks, 11156 ms) tcp{client}: 0x563e8a4ab388 2023-01-18 08:23:09.391 luup.variable_set:: 25001.urn:micasaverde-com:serviceId:SecuritySensor1.Tripped was: 0 now: 1 #hooks:0 2023-01-18 08:23:09.391 luup.variable_set:: 25001.urn:micasaverde-com:serviceId:SecuritySensor1.LastTrip was: 1674030032 now: 1674030189 #hooks:0 2023-01-18 08:23:09.394 openLuup.server:: request completed (1389 bytes, 1 chunks, 31782 ms) tcp{client}: 0x563e897eefd8 2023-01-18 08:23:09.395 openLuup.server:: request completed (1389 bytes, 1 chunks, 31662 ms) tcp{client}: 0x563e8a7c5248 2023-01-18 08:23:09.396 openLuup.server:: request completed (1389 bytes, 1 chunks, 17728 ms) tcp{client}: 0x563e89df13d8 2023-01-18 08:23:09.396 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x563e8a4ab388 2023-01-18 08:23:09.411 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x563e8a13f3c8 2023-01-18 08:23:09.412 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x563e8a79f3c8 2023-01-18 08:23:09.412 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x563e89df13d8 2023-01-18 08:23:09.413 openLuup.server:: GET /data_request?newTargetValue=1&DeviceNum=20330&id=action&serviceId=urn%3Aupnp-org%3AserviceId%3ASwitchPower1&action=SetTarget&output_format=json&_r=1674030189410 HTTP/1.1 tcp{client}: 0x563e 8a13f3c8 2023-01-18 08:23:09.413 openLuup.server:: GET /data_request?id=status&Timeout=15&DataVersion=31085224&MinimumDelay=50&output_format=json&_r=1674030189411 HTTP/1.1 tcp{client}: 0x563e8a79f3c8 2023-01-18 08:23:09.413 luup.call_action:: 20330.urn:upnp-org:serviceId:SwitchPower1.SetTarget 2023-01-18 08:23:09.413 luup.call_action:: action will be handled by parent: 37 2023-01-18 08:23:09.413 luup.variable_set:: 20330.urn:upnp-org:serviceId:SwitchPower1.Target was: 1 now: 1 #hooks:0 2023-01-18 08:23:09.449 openLuup.server:: request completed (35 bytes, 1 chunks, 36 ms) tcp{client}: 0x563e8a13f3c8 2023-01-18 08:23:09.461 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x563e8a13f3c8 2023-01-18 08:23:09.564 openLuup.server:: request completed (819 bytes, 1 chunks, 151 ms) tcp{client}: 0x563e8a79f3c8 2023-01-18 08:23:09.569 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x563e8a79f3c8 2023-01-18 08:23:09.581 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x563e8a32bf28Bad request from just now:
2023-01-18 18:29:26.695 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x557239889e58 2023-01-18 18:29:26.696 openLuup.server:: GET /data_request?id=status&Timeout=15&DataVersion=66503545&MinimumDelay=50&output_format=json&_r=1674066566691 HTTP/1.1 tcp{client}: 0x557239889e58 2023-01-18 18:29:26.799 openLuup.server:: request completed (833 bytes, 1 chunks, 2249 ms) tcp{client}: 0x557239a62f78 2023-01-18 18:29:26.911 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=66503545&Timeout=60&MinimumDelay=1500&_=1674030721531 HTTP/1.1 tcp{client}: 0x5572385f78d8 2023-01-18 18:29:27.028 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x557238b98c58 2023-01-18 18:29:27.029 openLuup.server:: GET /data_request?Text=Testing...1...2...3&Language=en-GB&GroupZones=Everywhere&Volume=50&DeviceNum=22&id=action&serviceId=urn%3Abochicchio-com%3AserviceId%3AVeraAlexa1&action=Say&output_format=json&_r=1674066567027 HTTP/1.1 tcp{client}: 0x557238b98c58 2023-01-18 18:29:27.029 luup.call_action:: 22.urn:bochicchio-com:serviceId:VeraAlexa1.Say 2023-01-18 18:29:27.029 luup_log:22: VeraAlexa: addToQueue: added to queue for 22 2023-01-18 18:29:43.149 openLuup.server:: error 'closed' sending 4 bytes to tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.150 openLuup.server:: ...only 0 bytes sent 2023-01-18 18:29:43.150 openLuup.server:: error 'closed' sending 29 bytes to tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.150 openLuup.server:: ...only 0 bytes sent 2023-01-18 18:29:43.150 openLuup.server:: error 'closed' sending 2 bytes to tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.150 openLuup.server:: ...only 0 bytes sent 2023-01-18 18:29:43.150 openLuup.server:: error 'closed' sending 5 bytes to tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.150 openLuup.server:: ...only 0 bytes sent 2023-01-18 18:29:43.150 openLuup.server:: request completed (29 bytes, 1 chunks, 16121 ms) tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.153 luup_log:63: BroadLink_Mk2 debug: RM3 Mini - IR 1: device is not a sensor or if a sensor; is not coded for 2023-01-18 18:29:43.153 luup_log:63: BroadLink_Mk2 debug: RM3 Mini - IR 1: veraId: 64, blId: a0:43:b0:8b:e0:e5, altId: a0:43:b0:8b:e0:e5_ir 2023-01-18 18:29:43.153 luup_log:63: BroadLink_Mk2 debug: RM3 Mini - IR 1: urn:schemas-micasaverde-com:device:IrTransmitter:1 2023-01-18 18:29:43.154 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=66503545&Timeout=60&MinimumDelay=1500&_=1674066518681 HTTP/1.1 tcp{client}: 0x557239a62f78 2023-01-18 18:29:43.155 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x557238b98c58 2023-01-18 18:29:43.157 openLuup.server:: request completed (591 bytes, 1 chunks, 16460 ms) tcp{client}: 0x557239889e58 2023-01-18 18:29:43.161 openLuup.io.server:: HTTP:3480 connection closed openLuup.server.receive closed tcp{client}: 0x557239889e58 2023-01-18 18:29:43.175 openLuup.io.server:: HTTP:3480 connection from 192.168.70.249 tcp{client}: 0x5572399f30e8 2023-01-18 18:29:43.176 openLuup.server:: GET /data_request?id=status&Timeout=15&DataVersion=66503545&MinimumDelay=50&output_format=json&_r=1674066583172 HTTP/1.1 tcp{client}: 0x5572399f30e8 2023-01-18 18:29:57.979 luup.variable_set:: 20380.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 22 now: 21 #hooks:0Any thoughts?
Cheers
C
I use the excellent SiteSensor plugin of @toggledbits for some years to get the data from my PWS on Wunderground.
This has worked flawlessly but recently it suddenly stopped working.
I see this in my Vera:
6899a8b1-ad67-430a-9dc8-f1da42b04b62-image.png
When I copy/paste the URL code to be queried in my browser this still works.
This is the URL:
https://api.weather.com/v2/pws/observations/current?stationId=ILIMBURG130&format=json&units=m&numericPrecision=decimal&apiKey=xxxxxxxxxxxxxxxxxxxxxxxxx
Patrick (or someone else on this forum) can you help me solve this ?
Many thanks in advance!
Virtual HTTP Devices plug-in:
I wanted to try this out. Installed the plugin and created one device, which came up as a light bulb. So far so good. In AltUI I clicked on the On/Off slider on the page. The log shows that the Target is set to one. Likewise for the Variable list in AltUI. However the Status never gets set to one and the light bulb icon doesn't go yellow.
In some plugins you set the Target and then the plugin checks the physical device actually went on by checking an actual status report from the device, which can be used to set the variable Status.
In other cases a plugin will send a message to the physical device but that device will have no status feedback mechanism available. So the Status variable has to be set locally when the Target is set and everybody hopes the physical device all worked.
Not to sure what Virtual HTTP Devices plug-in does in this regard? Does the above go in anyway to explaining what I'm seeing? Is the plugin looking for status feedback?
I have a couple of issue with Openluup ATM. I'm going to work through them in the order that they appeared if that's OK 🙂
OpenLuup on bare metal (Debian Bullseye) running Z-way server and Z-wave.me
Issue:
I deleted a (I think) virtual switch in OpenLuup
Now when I call up all devices I have this in a 'tile'
And below (in room 101)
ReferenceError: nil is not defined at eval (eval at evaluateConditions (http://192.168.70.249:3480/J_ALTUI_verabox.js:960:18), :1:1) at Object.evaluateConditions (J_ALTUI_verabox.js:960:18) at Object._evaluateConditions [as evaluateConditions] (J_ALTUI_verabox.js:1642:37) at Object._evaluateConditions [as evaluateConditions] (J_ALTUI_multibox.js:629:89) at Object. (http://192.168.70.249:3480/J_ALTUI_uimgr.js:2572:23) at Function.each (https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js:2:2976) at _getDeviceIconPath (http://192.168.70.249:3480/J_ALTUI_uimgr.js:2569:10) at _deviceIconHtml (http://192.168.70.249:3480/J_ALTUI_uimgr.js:2739:18) at _internalDeviceDraw (http://192.168.70.249:3480/J_ALTUI_uimgr.js:2765:19) at _deviceDraw (http://192.168.70.249:3480/J_ALTUI_uimgr.js:2840:4)Any ideas from anyone?
Full reboot has been done....
Cheers
C
I've been trying to figure out Reactor but I'm not very good at programming.
I have two scenes in VERA.
One scene should only run during the DAY and then stop running.
One scene should only run during the NIGHT and then stop running.
My scenes start off at the right times, but they do not turn off. I created a Sunrise/Sunset Reactor trigger and added it as a condition to each of my scenes.
However, the Reactor trigger when tripping or untripping does not prevent my Vera scenes from running. It will start them correctly the first day, but after that, both scene stay running and fight with each other. What am I doing wrong?
Thanks for any help!
If you are interested, here are the actions I wish to perform with each scene.
FARM STAND - DAY (runs at Sunrise)
Turn ON a device called LETTUCE LAMP2a) Every 60 min, turn ON a device called LETTUCE PUMP
2b) Wait 15 min then turn OFF a device called LETTUCE PUMP
FARM STAND - NIGHT (runs at Sunset)
Turn OFF a device called LETTUCE LAMP2a) Every 135 min, turn ON a device called LETTUCE PUMP
2b) Wait 15 min then turn OFF a device called LETTUCE PUMP
This sounds simple, but I cannot figure out how to disable these scenes when the theyre not supposed to run.
I am no longer using any VERA scenes. I am only using a REACTOR trigger and activities.
Will my activities do what I need them to do? See below:
Here's what I am trying to accomplish:
AT SUNRISE
Turn ON a light called LETTUCE LAMP and keep it ON.2a) Turn on a device called LETTUCE PUMP for 15 min each hour.
2b) Repeat the pump cycle all day long.
AT SUNSET
Turn OFF a light called LETTUCE LAMP and keep it OFF.2a) Turn on a device called LETTUCE PUMP for 15 min then wait 2 hours..
2b) Repeat the pump cycle all night long.
TRUE.jpg FALSE.jpg
Good evening, all.
Is there a simple readme to set up and use a Broadlink device with OpenLuup?
The readme on github points to a thread on the old forum, and thence to a rabbit hole.
Is it just a case of adding IP address of the device? Or does it need the MAC?
Then how do I fire commands? It looks like I need to find the codes and send via Lua?
TIA
C
Hi Patrick,
A quick question about your virtual sensor plugin. I saw that the child sensors rely on polling for sensor data updates. Was there a reason not to use a watch on the underlying (source) state variable as opposed to polling. I'm asking in the sense that I need a fairly rapid response to a rise in humidity, but am unsure how to set sensor polling without adding additional io drag to openLuup.
I currently use the state humidity variable directly in a reactor sensor (the data is captured via a bluetooth device with multiple humidity variables), however, these state humidity variables have a generated name making it difficult to determine what is what in group of approximately 10 state humidity variables. So a virtual sensor solves the naming problem, while creating some trigger delay due to polling.
Thx
@toggledbits
I have Reactor running under openLuup (which is running inside vwout's Docker container).
On the activities tab, it tells me I should update to a newer version of the device information database. When I go to the Tools tab, for a fraction of a second I can see the green "Update Device Info" button along with the Troubleshooting & Support and Device Spy sections. But after that fraction of a second, they disappear and I only see the Test Tools and Update Device Information Database sections, to just above where the Green button used to be.
I've tried this on both Edge and Firefox with the same behavior (with extensions both on and off).
Any suggestions?
Amcrest/Dahua Camera Plugin streaming and PTZ for openLuup/ALTUI
-
Ok, we are a step further. All variables are there now. Firstly, there is a small error in the DirectStreamingURL though. The brackets should not be there.
I have removed them, but still no image.
This is the only thing I get in the log:
2020-11-22 09:56:05.011 luup.variable_set:: 93.urn:micasaverde-com:serviceId:HaDevice1.CommFailureTime was: 0 now: 0 #hooks:0 2020-11-22 09:56:05.011 openLuup.scheduler:: [93] Lobo device startup completed: status=true, msg=Ready, name=Lobo 2020-11-22 09:56:05.011 openLuup.scheduler:: [297] Amcrest Dahua device startup 2020-11-22 09:56:05.011 luup.set_failure:: status = false 2020-11-22 09:56:05.011 luup.variable_set:: 297.urn:micasaverde-com:serviceId:HaDevice1.CommFailure was: false now: false #hooks:0 2020-11-22 09:56:05.011 luup.variable_set:: 297.urn:micasaverde-com:serviceId:HaDevice1.CommFailureTime was: 1606035145 now: 1606035365 #hooks:0 2020-11-22 09:56:05.011 luup.variable_set:: 297.urn:micasaverde-com:serviceId:HaDevice1.Commands was: camera_full_screen,camera_left,camera_right,camera_up,camera_down,camera_preset,camera_zoom_in,camera_zoom_out now: camera_full_screen,camera_left,camera_right,camera_up,camera_down,camera_preset,camera_zoom_in,camera_zoom_out #hooks:0 2020-11-22 09:56:05.011 openLuup.scheduler:: [297] Amcrest Dahua device startup completed: status=, msg=, name= 2020-11-22 09:56:05.012 luup_log:3: ALTUI: UPNPregisterDataProvider(3,Vera@192.168.1.14,http://127.0.0.1:3480/data_request?id=lr_HTTP_VeraBridgeMirror_192.168.1.14,[{ "default":"device.serviceId.name", "key":"mirror", "label":"Mirror", "type":"text" }]) 2020-11-22 09:56:05.012 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.DataStorageProviders was: {"emoncms":{"url":"","callback":"sendValueToStorage_emoncms","parameters":[{"default":1,"type":"number","key":"node... now: {"Vera@192.168.1.14":{"url":"http://127.0.0.1:3480/data_request?id=lr_HTTP_VeraBridgeMirror_192.168.1.14","callback... #hooks:0 2020-11-22 09:56:05.012 luup_log:3: ALTUI: UPNPregisterPlugin(3,urn:schemas-toggledbits-com:device:SiteSensor:1,J_SiteSensor1_ALTUI.js,SiteSensor_ALTUI.DeviceDraw,,,,SiteSensor_ALTUI.Favorite) 2020-11-22 09:56:05.016 luup.variable_set:: 3.urn:upnp-org:serviceId:altui1.PluginConfig was: {"urn:schemas-micasaverde-com:device:PowerMeter:1":{"DeviceDrawFunc":"ALTUI_PluginDisplays.drawPowerMeter","ScriptF... now: {"urn:schemas-micasaverde-com:device:PowerMeter:1":{"ScriptFile":"J_ALTUI_plugins.js","DeviceDrawFunc":"ALTUI_Plugi... #hooks:0 2020-11-22 09:56:05.017 luup_log:3: ALTUI: UPNPregisterPlugin(3,u
BTW I have tried the complete URL in the browser and that works.
-
Good news is that the plugin code is executing.
Stating the obvious but, did you check that the ip address and the credentials are setup?
It is working fine here (with the brackets). The display of the stream/snapshot is actually done by ALTUI. depending on the browser you use, it may buffer a bit strangely. -
Could you provide a screenshot of your attribute screen as well as a list of all your variables? I really have no idea why it isn't working for you. I even just added a camera to my openLuup setup and had no problem so something else is different. Are you seeing the camera control screen? Can you send commands to the camera like pan and tilt? What browser are you using? Can you try a different browser?
-
Ok, youre right, the plugin seems to work. I have tested with an other Amcrest model and that one does work. So the problem lies in the older models I have, that's a pity. I will have to do it through zoneminder then.
The PTZ does not seem to work however for my model.
I'm getting this error:
Unknown control type:js_button. See Debug
-
I'd be happy to improve the plugin to support more cameras if I can.
If the url is correct and the video is not working it is likely because the codec is not supported by the browser. If you tell me what camera it is, I will take a look.The error you are seeing about the button is not normal. I will take a look as well. This command is in javascript and is done by ALTUI. I don't believe it is in the plugin code but will check.
-
I don't get it. When I put the full URL directly in the browser window, like this, I get a stream (outside AltUI).
http://admin:<password>@192.168.1.17/cgi-bin/mjpg/video.cgi?channel=1&subtype=1
So that would mean it isn't the codec, right?
The model is: Amcrest IP3M-943B
-
Not sure why they would not work. It uses the same H264 and mjpg codec but your url uses mjpg. I have a bunch of IP3M-956/954 and they all work fine too.
Good catch on the js_button. I never noticed it but it seems to be inherited from deprecated code. I will fix that. Only some buttons were affected.I took advantage to fix a few thing around pan tilt/scanning. Released version 0.4.
This plugin was very raw when I took it over... I am finding so many things which were not quite right. -
I have tested the new version with my working model, but the buttons still do nothing. The error is gone and I don't see anything strange in the log.
2020-11-26 08:56:33.263 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377375215&Timeout=60&MinimumDelay=1500&_=1606377363201 HTTP/1.1 tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:33.642 luup.variable_set:: 10665.urn:upnp-org:serviceId:TemperatureSensor1.CurrentTemperature was: 19.60 now: 19.50 #hooks:0 2020-11-26 08:56:33.946 openLuup.server:: request completed (20648 bytes, 2 chunks, 682 ms) tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:34.059 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377375217&Timeout=60&MinimumDelay=1500&_=1606377363202 HTTP/1.1 tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:34.991 luup.variable_set:: 10664.urn:micasaverde-com:serviceId:HaDevice1.BatteryDate was: 1606377364 now: 1606377394 #hooks:0 2020-11-26 08:56:35.195 openLuup.server:: request completed (28287 bytes, 2 chunks, 1135 ms) tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:35.307 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377375219&Timeout=60&MinimumDelay=1500&_=1606377363203 HTTP/1.1 tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:37.593 openLuup.server:: GET /data_request?id=action&output_format=json&DeviceNum=297&serviceId=urn:micasaverde-com:serviceId:PanTiltZoom1&action=MoveLeft HTTP/1.1 tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:37.593 luup.call_action:: 297.urn:micasaverde-com:serviceId:PanTiltZoom1.MoveLeft 2020-11-26 08:56:37.593 openLuup.server:: request completed (60 bytes, 1 chunks, 0 ms) tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:37.630 openLuup.client:: WGET error status: -1, request: http://admin:DWvBqx6yT7SkMogw@192.168.1.18/cgi-bin/ptz.cgi?action=start&channel=0&code=Left&arg1=0&arg2=1&arg3=0 2020-11-26 08:56:37.934 openLuup.server:: request completed (19020 bytes, 2 chunks, 2626 ms) tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:38.091 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377375220&Timeout=60&MinimumDelay=1500&_=1606377363204 HTTP/1.1 tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:38.733 openLuup.client:: WGET error status: -1, request: http://admin:DWvBqx6yT7SkMogw@192.168.1.18/cgi-bin/ptz.cgi?action=stop&channel=0&code=Up&arg1=0&arg2=0&arg3=0 2020-11-26 08:56:39.741 openLuup.server:: GET /data_request?id=action&output_format=json&DeviceNum=297&serviceId=urn:micasaverde-com:serviceId:PanTiltZoom1&action=MoveRight HTTP/1.1 tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:39.741 luup.call_action:: 297.urn:micasaverde-com:serviceId:PanTiltZoom1.MoveRight 2020-11-26 08:56:39.742 openLuup.server:: request completed (61 bytes, 1 chunks, 1 ms) tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:39.775 openLuup.client:: WGET error status: -1, request: http://admin:DWvBqx6yT7SkMogw@192.168.1.18/cgi-bin/ptz.cgi?action=start&channel=0&code=Right&arg1=0&arg2=1&arg3=0 2020-11-26 08:56:40.280 openLuup.server:: request completed (19020 bytes, 2 chunks, 2188 ms) tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:40.424 openLuup.server:: GET /data_request?id=lu_status2&output_format=json&DataVersion=377375221&Timeout=60&MinimumDelay=1500&_=1606377363205 HTTP/1.1 tcp{client}: 0x55f5f5b61a78 2020-11-26 08:56:40.857 openLuup.client:: WGET error status: -1, request: http://admin:DWvBqx6yT7SkMogw@192.168.1.18/cgi-bin/ptz.cgi?action=stop&channel=0&code=Up&arg1=0&arg2=0&arg3=0 2020-11-26 08:56:41.476 openLuup.server:: GET /data_request?id=action&output_format=json&DeviceNum=297&serviceId=urn:micasaverde-com:serviceId:PanTiltZoom1&action=MoveUp HTTP/1.1 tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:41.476 luup.call_action:: 297.urn:micasaverde-com:serviceId:PanTiltZoom1.MoveUp 2020-11-26 08:56:41.477 openLuup.server:: request completed (58 bytes, 1 chunks, 0 ms) tcp{client}: 0x55f5f5fd7d88 2020-11-26 08:56:41.497 openLuup.client:: WGET error status: -1, request: http://admin:DWvBqx6yT7SkMogw@192.168.1.18/cgi-bin/ptz.cgi?action=start&channel=0&code=Up&arg1=0&arg2=1&arg3=0 2020-11-26 08:56:41.600 openLuup.server:: request completed (19020 bytes, 2 chunks, 1176 ms) tcp{client}: 0x55f5f5b61a78
The working model is the Amcrest IP4M-1051
-
I am not getting any of the WGET errors in my logs. I am not sure what this status -1 means besides the fact that the camera is rejecting the call. I am also a bit surprised that your credentials in the url are only partially encoded. (the username is doesn't appear to be). Something doesn't seem right.
Honestly I have not gotten to the bottom of the stream. One of my cameras which I just added has all the pan and tilt buttons work so it is communicated properly but the video does not show. I tested on firefox and none of the cameras show any images.
Will try to dig deeper into this as I think it is more java code from ALTUI than it is a plugin/openLuup problem. -
Alright so I made some progress with this. Sorry I am not very good in JS so it took me a while to understand how ALTUI handles this.
I have updated the plugin which should enable getting images from the camera if your browser has the ability to disable cross origin restrictions (i.e Safari "develop" menu). I have tested this on firefox as well but unlike safari, firefox somehow sends an URL without the credentials... which means that you won't be able to see your camera feed. I submitted a pull request to @amg0 to implement credentials in ALTUI.
-
-
Yes the older models would work too and yes you do need to get you browser to log in.
The reason is this:
All the plugin commands go from openLuup to the cameras. This should work without any problems.
The video stream however is a call from your client web-browser to the camera. This requires a separate login on top of the credentials which have already been established between openLuup and the cameras. The behavior obviously then varies a lot from browser to browser. For example Safari remembers the credentials so you only need to log in once and the call from ALTUI done by safari automatically adds the credentials. I discovered that firefox doesn't do that and requires the credentials to be added back in the url. -
This was the very core of the design of ALTUI. The vera was very underpowered already so ALTUI moved the UI processing to the client browser using javascript instead of relying on the webserver on the vera (lightttpd). As the vera is properly incapable of processing high resolution camera streams, ALTUI moved that processing to the browser (and rightfully so) and therefore all the authentication must be done by the client browser.
By the way @amg0 has taken in my pull request so you can expect the next version of ALTUI to support this. I personally didn't notice any problem because I was using Safari.