MQTT2 true->on und false->off

Begonnen von cberl, 22 Mai 2020, 18:40:24

Vorheriges Thema - Nächstes Thema

cberl

Hi,

ZitatDie IP-Adresse könnte man (nach Tasmota-Beispiel) mit einem grünen Punkt für "connect" visualisieren und verlinken?
Du meinst da das Webif des Adam? Da gibts keinen generellen Connect Status. Für das Grün habe ich jetzt mal den connect aus dem Reading ausgewertet:

So sieht es jetzt das Unified aus:

defmod ADAM6060_00D0C9FC434C_unified MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_unified IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_unified devStateIcon {my $alivecolor = 'rc_STOP@red';;$alivecolor='rc_STOP@green' if (ReadingsVal($name, "status","") eq "connect");;"<div>" . FW_makeImage("$alivecolor","rc_STOP") }
attr ADAM6060_00D0C9FC434C_unified jsonMap do1:state c:0 q:0 s:0 t:0
attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_unified room 82.MQTT
attr ADAM6060_00D0C9FC434C_unified setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_unified setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\
do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do2:r {"v":$payload})}\
do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do3:r {"v":$payload})}\
do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do4:r {"v":$payload})}\
do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do5:r {"v":$payload})}\
do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do6:r {"v":$payload})}

setstate ADAM6060_00D0C9FC434C_unified off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di1 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di2 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di3 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di4 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di5 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 di6 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 do2 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 do3 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 do4 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 do5 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 do6 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 ipaddr 192.168.50.54
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 macid 00D0C9FC434C
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 name ADAM6060
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 state off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-26 16:27:50 status connect


Das Split für do1:

defmod ADAM6060_00D0C9FC434C_split_do1 MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_split_do1 IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_split_do1 genericDeviceType switch
attr ADAM6060_00D0C9FC434C_split_do1 icon on
attr ADAM6060_00D0C9FC434C_split_do1 readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/do1":(true)/"on"/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_split_do1 room 82.MQTT
attr ADAM6060_00D0C9FC434C_split_do1 setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_split_do1 setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\

attr ADAM6060_00D0C9FC434C_split_do1 setStateList on off

setstate ADAM6060_00D0C9FC434C_split_do1 off
setstate ADAM6060_00D0C9FC434C_split_do1 2020-05-26 15:53:42 ipaddr 192.168.50.54
setstate ADAM6060_00D0C9FC434C_split_do1 2020-05-26 15:53:42 macid 00D0C9FC434C
setstate ADAM6060_00D0C9FC434C_split_do1 2020-05-26 15:53:42 name ADAM6060
setstate ADAM6060_00D0C9FC434C_split_do1 2020-05-26 15:58:11 state off
setstate ADAM6060_00D0C9FC434C_split_do1 2020-05-26 15:53:42 status connect


Das Split für di5 (nur Digital Input):

defmod ADAM6060_00D0C9FC434C_split_di5 MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_split_di5 IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_split_di5 readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/di5":(true)/"on"/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_split_di5 room 82.MQTT

setstate ADAM6060_00D0C9FC434C_split_di5 on
setstate ADAM6060_00D0C9FC434C_split_di5 2020-05-26 16:21:51 state on


Ich bin damit schon recht zufrieden (funktioniert). Was meinst Du?
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

Zitat von: cberl am 26 Mai 2020, 16:30:45
Ich bin damit schon recht zufrieden (funktioniert). Was meinst Du?
Erst mal:  :) .

Sieht schon ganz gut aus, alles weitere ist Jammern auf hohem Niveau ;D .

Da du es scheinbar wissen willst, jetzt noch die "aber" (im Sinne von "100%-Feinschliff"):
Zitat
Hi,
Du meinst da das Webif des Adam? Da gibts keinen generellen Connect Status.
War eher so gemeint: Bei Tasmota u.A. kann man mit dem Web-Interface wirklich was anfangen, z.B. updates anschubsen. Dann ist der Link auf die Webseite nice to have. Wenn das sowieso statisch ist, ist es Wurst, und man kann das einfacher halten (iV. multiline-stateFormat)...
attr ADAM6060_00D0C9FC434C_unified devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green
attr ADAM6060_00D0C9FC434C_unified stateFormat status\
state
Wenn man mag, könnte man dann da noch die Relais 2-6 dazubasteln. Muß dann z.b. nummeriert werden und in devStateIcon entsprechend ergänzt: "2.on:on:do2+off 2.off:off:do2+on" (Falls du weiteren Text dazwischenbasteln willst, bitte darauf achten, dass nach jedes n:di(n) eine eigene Zeile bekommt). Alternativ ginge hier webCmd/webCmdLabel.

In dem "unified" könnte man das mit dem "changed" auch über mehrere readingList-Einträge machen, wobei man für die Kanäle do2-6 dann eine while-Schleife basteln könnte analog zu der hier (natürlich "aufgehübscht" mit der Frage, ob das geändert ist; das ist zugegebenermaßen ziemlich fancy, aber du scheinst es wirklich wissen zu wollen :) ...):
  TELETOPIC/RESULT:.* { my %ret; while ($EVENT =~ /.Id...([A-F0-9]{12})...Temperature..([-]?[\d]+\.[\d]+)./g) { $ret{"Temperatur_".$1}=$2; }; return \%ret; }\
Die Eingänge würde ich nicht vereinzeln, weil man damit ja eh' nur was anfangen kann, wenn man einen Eventhandler darauf ausetzt, und dem sind die SetExtensions egal... (Setzt aber voraus, dass man entweder nur Änderungen triggern läßt oder gleich mit der while-Schleife filtert ::) ).

Aber nochmal: "Jammern" auf hohem Niveau!
(Und du darfst auch gerne sagen, wenn dir das "too much" ist ;) .
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cberl

Ein guter Tip mit den devStateIcon! Das werde ich mal noch in meine Modbus Schalter und EIO-Boards einbauen. Zu Schalten gibts halt immer was  ;)
Die while-Schleife ist mir dann doch etwas to much, letztendlich gibts ja noch event-on-change-reading.

Das Unified sieht nun so aus:

defmod ADAM6060_00D0C9FC434C_unified MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_unified IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_unified devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green 2.on:on:do2+off 2.off:off:do2+on 3.on:on:do3+off 3.off:off:do3+on 4.on:on:do4+off 4.off:off:do4+on 5.on:on:do5+off 5.off:off:do5+on 6.on:on:do6+off 6.off:off:do6+on
attr ADAM6060_00D0C9FC434C_unified event-on-change-reading .*
attr ADAM6060_00D0C9FC434C_unified jsonMap do1:state c:0 q:0 s:0 t:0
attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; json2nameValue($EVENT,'',$JSONMAP) }\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_unified room 82.MQTT
attr ADAM6060_00D0C9FC434C_unified setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_unified setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\
do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do2:r {"v":$payload})}\
do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do3:r {"v":$payload})}\
do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do4:r {"v":$payload})}\
do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do5:r {"v":$payload})}\
do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do6:r {"v":$payload})}
attr ADAM6060_00D0C9FC434C_unified stateFormat status\
state\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr ADAM6060_00D0C9FC434C_unified webCmd :

setstate ADAM6060_00D0C9FC434C_unified connect\
off\
2:off\
3:off\
4:off\
5:off\
6:off\
<br>\
DigiIn\
on\
on\
on\
on\
off\
on


1000 Dank!
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

 :)

Aber jetzt will ich es wissen ;D 8) ::) ...
Vielleicht magst du ja doch noch folgendes testen:

attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g; $EVENT =~ s/false/"off"/g; my %ret; while ($EVENT =~ /.d[io]...(on|off)./g) { my $rname = $1 ne "do1" ? $1 : "state"; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret{$rname}=$2 }; return \%ret;}\
...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Beta-User

...falls das klappt, wären das hier die attrTemplates:
name:6channel_ethernet_board_6input_split
filter:TYPE=MQTT2_DEVICE
desc:For use with Advantech ADAM6060 ethernet board. <br>NOTE: First experimental version, for configuration and to contribute see <a href="https://forum.fhem.de/index.php/topic,111429.0.html">Forum Thread</a>.
order:W_04
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,Advantech/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green
attr DEVICE readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do1":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }\
Advantech/DEVNAME/Device_Status:.* { json2nameValue($EVENT) }
attr DEVICE setExtensionsEvent 1
attr DEVICE setList on:noArg Advantech/DEVNAME/ctl/do1:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do1:r {"v":false}
attr DEVICE stateFormat status\
state\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr DEVICE webCmd : 
copy DEVICE DEVICE_CH2
copy DEVICE DEVICE_CH3
copy DEVICE DEVICE_CH4
copy DEVICE DEVICE_CH5
copy DEVICE DEVICE_CH6
setreading DEVICE associatedWith DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6
setreading DEVICE_CH2 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6
setreading DEVICE_CH3 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6
setreading DEVICE_CH4 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH5,DEVICE_CH6
setreading DEVICE_CH5 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH6
setreading DEVICE_CH6 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5
attr DEVICE_CH2 readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do2":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH3 readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do3":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH4 readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do4":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH5 readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do5":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH6 readingList Advantech/DEVNAME/data:.* { $EVENT =~ m/do6":(true)/g;; my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH2 setList on:noArg Advantech/DEVNAME/ctl/do2:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do2:r {"v":false}
attr DEVICE_CH3 setList on:noArg Advantech/DEVNAME/ctl/do3:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do3:r {"v":false}
attr DEVICE_CH4 setList on:noArg Advantech/DEVNAME/ctl/do4:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do4:r {"v":false}
attr DEVICE_CH5 setList on:noArg Advantech/DEVNAME/ctl/do5:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do5:r {"v":false}
attr DEVICE_CH6 setList on:noArg Advantech/DEVNAME/ctl/do6:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do6:r {"v":false}
set DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6 attrTemplate speechcontrol_type_switch
attr DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6 model 6channel_ethernet_board_6input_split
setreading DEVICE,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6 attrTemplateVersion 20200527

name:6channel_ethernet_board_6input_unified
filter:TYPE=MQTT2_DEVICE
desc:For use with Advantech ADAM6060 ethernet board. <br>NOTE: First experimental version, for configuration and to contribute see <a href="https://forum.fhem.de/index.php/topic,111429.0.html">Forum Thread</a>.
order:W_04a
par:DEVNAME;Device's name in the topic tree;{ AttrVal("DEVICE","readingList","") =~ m,Advantech/([^/]+)/, ? $1 : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green 2.on:on:do2+off 2.off:off:do2+on 3.on:on:do3+off 3.off:off:do3+on 4.on:on:do4+off 4.off:off:do4+on 5.on:on:do5+off 5.off:off:do5+on 6.on:on:do6+off 6.off:off:do6+on
attr DEVICE readingList Advantech/DEVNAME/data:.* { $EVENT =~ s/true/"on"/g; $EVENT =~ s/false/"off"/g; my %ret; while ($EVENT =~ /.d[io]...(on|off)./g) { my $rname = $1 ne "do1" ? $1 : "state"; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret{$rname}=$2 }; return \%ret; }\
Advantech/DEVNAME/Device_Status:.* { json2nameValue($EVENT) }
attr DEVICE setExtensionsEvent 1
attr DEVICE setList on:noArg Advantech/DEVNAME/ctl/do1:r {"v":true}\
  off:noArg Advantech/DEVNAME/ctl/do1:r {"v":false}\
  do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/DEVNAME/ctl/do2:r {"v":$payload})}\
  do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/DEVNAME/ctl/do3:r {"v":$payload})}\
  do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/DEVNAME/ctl/do4:r {"v":$payload})}\
  do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/DEVNAME/ctl/do5:r {"v":$payload})}\
  do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/DEVNAME/ctl/do6:r {"v":$payload})}
attr DEVICE stateFormat status\
state\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr DEVICE webCmd : 

set DEVICE attrTemplate speechcontrol_type_switch
attr DEVICE model 6channel_ethernet_board_6input_unified
setreading DEVICE attrTemplateVersion 20200527

Hoffe, das mit dem mehrfach-attrTemplate betr. Sprachsteuerung ist beim split nicht "too much"...

Gibt's eigentlich irgendwelche Einrichtungshinweise, um das Ding dazu zu überreden, überhaupt MQTT irgendwohin zu senden? (Beim "Konkurrenzprodukt" ist die betr. Seite wohl etwas versteckt).
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cberl

Hi, dass passt noch nicht ganz:
Mit dem neuen readingList gibts nur noch das Reading state und das gibt den letzten do Schaltvorgang aus. Bei einem di Schaltvorgang ändert sich nichts.


defmod ADAM6060_00D0C9FC434C_unified MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_unified IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_unified devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green 2.on:on:do2+off 2.off:off:do2+on 3.on:on:do3+off 3.off:off:do3+on 4.on:on:do4+off 4.off:off:do4+on 5.on:on:do5+off 5.off:off:do5+on 6.on:on:do6+off 6.off:off:do6+on
attr ADAM6060_00D0C9FC434C_unified event-on-change-reading .*
attr ADAM6060_00D0C9FC434C_unified jsonMap do1:state c:0 q:0 s:0 t:0
attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; my %ret;; while ($EVENT =~ /.d[io]...(on|off)./g) { my $rname = $1 ne "do1" ? $1 : "state";; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret{$rname}=$2 };; return \%ret;;}\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_unified room 82.MQTT
attr ADAM6060_00D0C9FC434C_unified setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_unified setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\
do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do2:r {"v":$payload})}\
do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do3:r {"v":$payload})}\
do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do4:r {"v":$payload})}\
do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do5:r {"v":$payload})}\
do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do6:r {"v":$payload})}
attr ADAM6060_00D0C9FC434C_unified stateFormat status\
state\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr ADAM6060_00D0C9FC434C_unified webCmd :

setstate ADAM6060_00D0C9FC434C_unified status\
do5\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 15:24:30 state do5




Zu der Einrichtung des ADAM6060:
Da gibt es die Konfigsoftware AdamApax.Net im Downloadbereich von Advantech.
Gerät suchen, Reiter Cloud, MQTT Host anpassen und save (def. PW ist 00000000) - Mehr ist nicht.
Etwas böse ist, dass nur die neueren ADAM6060-D MQTT können. Ältere Typen (BE, CE oder so) können nur http, Modbus, tcp...
Im Klartext steht das natürlich nirgendwo. Deswegen habe ich hier auch drei 6060 die ich über ModbusAttr am Fhem habe.
Die Version steht dummerweise nicht auf dem Gerät sondern ist entweder auf der Verpackung zu sehen oder über die Seriennummer auf der Supportseite herauszubekommen. Die Seriennummerabfrage funktioniert aber häufig nicht....
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

Hmm,

wäre auch zu schön gewesen. Aber an sich sollte das klappen, es fehlen vermutlich nur zwei Zeichen: "->"... Magst du das testen?

attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; my %ret;; while ($EVENT =~ /.d[io]...(on|off)./g) { my $rname = $1 ne "do1" ? $1 : "state";; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret->{$rname}=$2 };; return \%ret;;}\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }


Betr. der Einrichtung muß ich mir also was für "desc:" überlegen, aber du kannst gerne auch was vorschlagen...
Basis könnte das hier vom 8-Kanal-Board sein:
Zitatdesc:For use with some 8-channel ethernet boards. Might be usefull for other stuff based on TI's <a href="https://www.waveshare.com/wiki/DP83848_Ethernet_Board">DP83848 ethernet chipset</a>.<br>NOTE: First experimental version, for configuration and to contribute see <a href="https://forum.fhem.de/index.php/topic,107536.msg1016379.html#msg1016379">Forum Thread</a>. You have to configure MQTT first, might be found under http://<device-ip-adress>/zm.cgi!
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cberl

Hi,
sobald das -> drin ist gibts ein: Global symbol "$ret" requires explicit package name (did you forget to declare "my $ret"?) at (eval 3263165) line 1.

Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g; $EVENT =~ s/false/"off"/g; my %ret; while ($EVENT =~ /.d[io]...(on|off)./g) { my $rname = $1 ne "do1" ? $1 : "state"; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret->{$rname}=$2 }; return \%ret;}


Zu dem desc: schreibe ich was.
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

Argh, die erste Fassung war wohl eben nur fast richtig: 4 Zeichen zwischen [io] und (on|off) statt drei...

Für die Attribut-Eingabe (die Logik für "state" ist so rum vermutlich einfacher lesbar):
{ $EVENT =~ s/true/"on"/g; $EVENT =~ s/false/"off"/g; my %ret; while ($EVENT =~ /.d[io].{4}(on|off)./g) { my $rname = $1 eq "do1" ? "state" : $1; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret{$rname} = $2 }; return \%ret;}
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cberl

Noch, keine Readings:

defmod ADAM6060_00D0C9FC434C_unified MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_unified IODev MQTT2Client
attr ADAM6060_00D0C9FC434C_unified devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green 2.on:on:do2+off 2.off:off:do2+on 3.on:on:do3+off 3.off:off:do3+on 4.on:on:do4+off 4.off:off:do4+on 5.on:on:do5+off 5.off:off:do5+on 6.on:on:do6+off 6.off:off:do6+on
attr ADAM6060_00D0C9FC434C_unified jsonMap do1:state c:0 q:0 s:0 t:0
attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { $EVENT =~ s/true/"on"/g;; $EVENT =~ s/false/"off"/g;; my %ret;; while ($EVENT =~ /.d[io].{4}(on|off)./g) { my $rname = $1 eq "do1" ? "state" : $1;; $2 eq ReadingsVal($NAME,$rname,"unknown") ? undef : $ret{$rname} = $2 };; return \%ret;;}\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_unified room 82.MQTT
attr ADAM6060_00D0C9FC434C_unified setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_unified setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\
do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do2:r {"v":$payload})}\
do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do3:r {"v":$payload})}\
do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do4:r {"v":$payload})}\
do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do5:r {"v":$payload})}\
do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do6:r {"v":$payload})}
attr ADAM6060_00D0C9FC434C_unified stateFormat status\
state\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr ADAM6060_00D0C9FC434C_unified webCmd :

setstate ADAM6060_00D0C9FC434C_unified status\
do6\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:22:00 state do6



Zur desc: in Anlehnung an das EIO-Board:
For use with Advantech ADAM-6060-D 6-ch digital Input and 6-ch relay output.
NOTE: First experimental version, for configuration and to contribute see Forum Thread. You have to configure MQTT first with the Adam/Apax.Net Utility - cloud function: Set your broker and look for the topic.
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

...heute ist aber irgendwie der Wurm drin ::) .

Wir brauchen auch $1 (bzw. $2)...
{ $EVENT =~ s/true/"on"/g; $EVENT =~ s/false/"off"/g; my %ret; while ($EVENT =~ /.(d[io][1-6])...(on|off)./g) { my $rname = $1 eq "do1" ? "state" : $1; $2 eq ReadingsVal($NAME,$1,"unknown") ? undef : $ret{$1}=$2 }; return \%ret;}

desc ist m.E. ok so.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

cberl

Es wird: Die Readings werden jetzt bei den Schaltvorgängen aktualisiert, lustigerweise wird aber nur der Zeitstempel vom state geändert.

setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di1 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di2 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di3 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di4 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di5 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 di6 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do1 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do2 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do3 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do4 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do5 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:41:50 do6 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-27 21:44:14 state do5
Fhem immer aktuell @win2016 und @ubuntu VM|7xFRM/ArduinoEthernet|Homematic|HMLan|CUNO|HarmonyHub|Modbus|Z-Wave|Milight-Hub|MQTT|OWX an ETH-UART|GoogleAssist,Alexa,Sonos|2nHelios IP Vario|Amad-Odroid|Telegram|Enigma2

Beta-User

Jein...

Habe jetzt auch mal etwas mit dem Code rumgespielt und folgendes festgestellt: Es klappt genau 1x, beim zweiten Versuch, erscheint eine Fehlermeldung im Log, von wegen "read-only value" soll geändert werden. Bin noch nicht dahintergestiegen, was der Hintergrund ist, vielleicht finde ich es noch, oder Rudi erhellt mich mal wieder...?
Fehlermeldung sieht so aus (den publish mit mosquitto_pub kann man erkennen, ich hatte das RAW von gestern 21:27 modifiziert, code ist in der Fehlermeldung):
Zitat2020.05.28 08:37:23 1: ERROR evaluating my $DEVICETOPIC='ADAM6060_00D0C9FC434C_unified';my $JSONMAP='$defs{"ADAM6060_00D0C9FC434C_unified"}{JSONMAP}';my $TOPIC='Advantech/00D0C9FC434C/data';my $CID='test';my $NAME='ADAM6060_00D0C9FC434C_unified';my $EVENT='{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":false}';my $EVTPART0='{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":false}';{ my (%rets, $rnam, $rvalue);; while ($EVENT =~ m/.(d[io][1-6]).{2}(true|false)/g) { $rnam = $1 eq "do1" ? "state" : $1;; $rvalue = $2 eq "true" ? "on" : "off";; $rvalue eq ReadingsVal($NAME,$rnam,"unknown") ? undef : $rets{$rnam} = $rvalue };; return \%rets;;}: Modification of a read-only value attempted at (eval 169338) line 1.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

rudolfkoenig

ZitatBin noch nicht dahintergestiegen, was der Hintergrund ist, vielleicht finde ich es noch, oder Rudi erhellt mich mal wieder...?
Falls ich helfen soll, bitte mir ein Nachstell-HOWTO basteln.

Beta-User

Zitat von: rudolfkoenig am 28 Mai 2020, 09:02:10
Falls ich helfen soll, bitte mir ein Nachstell-HOWTO basteln.
Gerne, dann also hier mal ausgehend von einem "nackten" System, davor mit udate versehen.
defmod m2server MQTT2_SERVER 1883 global
defmod ADAM6060_00D0C9FC434C_unified MQTT2_DEVICE
attr ADAM6060_00D0C9FC434C_unified IODev m2server
attr ADAM6060_00D0C9FC434C_unified devStateIcon disconnect:rc_STOP@red connect:rc_STOP@green 2.on:on:do2+off 2.off:off:do2+on 3.on:on:do3+off 3.off:off:do3+on 4.on:on:do4+off 4.off:off:do4+on 5.on:on:do5+off 5.off:off:do5+on 6.on:on:do6+off 6.off:off:do6+on
attr ADAM6060_00D0C9FC434C_unified jsonMap do1:state c:0 q:0 s:0 t:0
attr ADAM6060_00D0C9FC434C_unified readingList Advantech/00D0C9FC434C/data:.* { my (%rets, $rnam, $rvalue);; while ($EVENT =~ m/.(d[io][1-6]).{2}(true|false)/g) { $rnam = $1 eq "do1" ? "state" : $1;; $rvalue = $2 eq "true" ? "on" : "off";; $rvalue eq ReadingsVal($NAME,$rnam,"unknown") ? undef : $rets{$rnam} = $rvalue };; return \%rets;;}\
Advantech/00D0C9FC434C/Device_Status:.* { json2nameValue($EVENT) }
attr ADAM6060_00D0C9FC434C_unified room Test
attr ADAM6060_00D0C9FC434C_unified setExtensionsEvent 1
attr ADAM6060_00D0C9FC434C_unified setList on:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":true}\
off:noArg Advantech/00D0C9FC434C/ctl/do1:r {"v":false}\
do2:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do2:r {"v":$payload})}\
do3:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do3:r {"v":$payload})}\
do4:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do4:r {"v":$payload})}\
do5:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do5:r {"v":$payload})}\
do6:on,off {my $payload = $EVTPART1 eq "on" ? "true" : "false";; qq(Advantech/00D0C9FC434C/ctl/do6:r {"v":$payload})}
attr ADAM6060_00D0C9FC434C_unified stateFormat status\
state\
2:do2\
3:do3\
4:do4\
5:do5\
6:do6\
<br>\
DigiIn\
di1\
di2\
di3\
di4\
di5\
di6
attr ADAM6060_00D0C9FC434C_unified webCmd :
Darauf dann ein publish:
mosquitto_pub -h localhost -i test -m '{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":false}' -t Advantech/00D0C9FC434C/dataergibt folgende setstate im RAW:
setstate ADAM6060_00D0C9FC434C_unified status\
on\
2:off\
3:off\
4:off\
5:off\
6:off\
<br>\
DigiIn\
on\
on\
on\
on\
off\
on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di1 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di2 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di3 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di4 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di5 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 di6 on
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 do2 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 do3 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 do4 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 do5 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 do6 off
setstate ADAM6060_00D0C9FC434C_unified 2020-05-28 10:08:11 state on

Darauf dann ein weiterer publish, (letzter Wert von false auf true geändert):
mosquitto_pub -h localhost -i test -m '{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":true}' -t Advantech/00D0C9FC434C/data
und man erhält folgenden Logeintrag:
Zitat2020.05.28 10:12:07 1: ERROR evaluating my $CID='test';my $EVENT='{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":true}';my $EVTPART0='{"s":1,"t":0,"q":192,"c":1,"di1":true,"di2":true,"di3":true,"di4":true,"di5":false,"di6":true,"do1":true,"do2":false,"do3":false,"do4":false,"do5":false,"do6":true}';my $NAME='ADAM6060_00D0C9FC434C_unified';my $DEVICETOPIC='ADAM6060_00D0C9FC434C_unified';my $TOPIC='Advantech/00D0C9FC434C/data';my $JSONMAP='$defs{"ADAM6060_00D0C9FC434C_unified"}{JSONMAP}';{ my (%rets, $rnam, $rvalue);; while ($EVENT =~ m/.(d[io][1-6]).{2}(true|false)/g) { $rnam = $1 eq "do1" ? "state" : $1;; $rvalue = $2 eq "true" ? "on" : "off";; $rvalue eq ReadingsVal($NAME,$rnam,"unknown") ? undef : $rets{$rnam} = $rvalue };; return \%rets;;}: Modification of a read-only value attempted at (eval 65) line 1.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files