8fach I/O Board mit MQTT2_Device

Begonnen von cberl, 23 Januar 2020, 17:41:19

Vorheriges Thema - Nächstes Thema

Beta-User

Zu $newstate: Du hattest schon "alles" mit in die readingList eingebaut? Die Musterzeile hatte die Deklaration ganz am Anfang enthalten, ist evtl. untergegangen:
Zitat von: Beta-User am 12 Februar 2020, 07:40:51
  /Home/EIOBoard1state:.* { my $newstate = $EVENT =~ m,output...([01])([01]{7}), ? $1 ? "on" : "off";;;; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }

Das ist schon mal gut, dass CH1 funktioniert. CH2 muß anders sein, weil wir da ja die erste Ziffer "as is" übernehmen wollen. Kannst du mal das hier testen:
attr EIOBoard1_M2_CH2 setList off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/${1}0$2/g;;;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/${1}1$2/g;;;; "/Home/EIOBoard1ctr setr=$output"}

Falls das klappt und du Lust hast, das attrTemplate zu vervollständigen: Für die anderen müßte man dann die Zahl der Wiederholungen ändern, also für den dritten: 
s/([01]{2})[01]([01]{5})/${1}1$2/g
Und bitte einmal mit nur einem ";" beim GUI-Editieren austesten...
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

CH2 funktioniert jetzt auch - Super.
Und es reicht ein ; in der GUI aus.

Bei der readingList muss ich nochmal nachfragen. Aus:

attr EIOBoard1_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01])([01]{7}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }

Wird:

attr EIOBoard1_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { my $newstate = $EVENT =~ m,output...([01])([01]{7}), ? $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} } 

Da bekomme ich aber ein:
syntax error at (eval 12916007) line 1, at EOF
Global symbol "$newstate" requires explicit package name (did you forget to declare "my $newstate"?) at (eval 12916007) line 1.
Global symbol "$newstate" requires explicit package name (did you forget to declare "my $newstate"?) at (eval 12916007) line 1.

attr EIOBoard1_M2 readingList /Home/EIOBoard1state:.* { my $newstate = $EVENT} funktioniert. Mit dem Rest hinten aber nicht mehr. Ich finde den Fehler 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

Mist... Mein Code war Käse, ich habe mich durch die Fehlermeldung irgendwie in die falsche Richtung leiten lassen, da waren wohl zu viele Schritte auf einmal...

So sollte es klappen:
  /Home/EIOBoard1state:.* { $EVENT =~ /output...([01])([01]{7})/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} } 
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, nix mehr mit Käse! Alles Bestens. Vielen Dank.
Ich schaue mir das dann mal mit dem Template an.

...habe mir mal gleich noch so ein Board bestellt.
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

 :)
Puh, Danke für die Entwarnung!

Dann warte ich jetzt mal, was du aus den Bausteinchen jetzt so zauberst und wie die Erfahrungen mit dem Ding auf längere Frist so sind - wie gesagt, ich mag das Teil schon alleine deshalb, weil es verkabelt wird, auch wenn ich grade keinen Bedarf habe (und wenn, den dann mit MySensors@RS485 decken würde)...

Bin mal gespannt, wann der erste unserer MCU-Cracks sich des Teils annimmt und eine eigene firmware dafür baut - diese Klimmzüge zur Auswertung von output könnte man sich sparen, würde das Teil gleich "vernünftige" Rückmeldung zu einzelnen Kanälen geben ;D .
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, ich wollte das nun für die anderen Relays erweitern und scheitere schon beim anpassen des realdingList von CH2. Das Relays schaltet richtig, der state bleibt aber immer on:

defmod EIOBoard1_M2_CH2 MQTT2_DEVICE
attr EIOBoard1_M2_CH2 IODev MQTT2Client
attr EIOBoard1_M2_CH2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1_M2_CH2 genericDeviceType switch
attr EIOBoard1_M2_CH2 model 8channel_ethernet_board_split
attr EIOBoard1_M2_CH2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...([01])[01]([01]{6})/;;  my $newstate = $2 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1_M2_CH2 room 82.MQTT
attr EIOBoard1_M2_CH2 setList off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/([01])[01]([01]{6})/${1}0$2/g;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/([01])[01]([01]{6})/${1}1$2/g;; "/Home/EIOBoard1ctr setr=$output"}
attr EIOBoard1_M2_CH2 setStateList on off

setstate EIOBoard1_M2_CH2 on
setstate EIOBoard1_M2_CH2 2020-02-15 09:06:19 output 00000000
setstate EIOBoard1_M2_CH2 2020-02-15 09:58:47 state on


Hier nochmal der funktionierende CH1:

defmod EIOBoard1_M2 MQTT2_DEVICE
attr EIOBoard1_M2 IODev MQTT2Client
attr EIOBoard1_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1_M2 genericDeviceType switch
attr EIOBoard1_M2 model 8channel_ethernet_board_split
attr EIOBoard1_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...([01])([01]{7})/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1_M2 room 82.MQTT
attr EIOBoard1_M2 setList off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/[01]([01]{7})/0$1/g;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/[01]([01]{7})/1$1/g;; "/Home/EIOBoard1ctr setr=$output"}
attr EIOBoard1_M2 setStateList on off

setstate EIOBoard1_M2 on
setstate EIOBoard1_M2 2020-02-12 18:05:23 associatedWith EIOBoard1_M2_CH2
setstate EIOBoard1_M2 2020-02-13 17:38:04 output 00000000
setstate EIOBoard1_M2 2020-02-15 10:22:00 state on



Die Vervollständigung für die weiteren Kanäle verstehe ich nicht. Habe das jetzt mal nach Gefühl gemacht :-[
Kannst Du das bitte richtig rücken?

CH1 s/[01]([01]{7})/1$1/g
CH2 s/([01])[01]([01]{6})/${1}1$2/g
CH3 s/([01]{2})[01]([01]{5})/${1}1$2/g -> muss das 1$3/g sein?
CH4 s/([01]{3})[01][01]([01]{4})/${1}1$4/g
CH5 s/([01]{4})[01][01][01]([01]{3})/${1}1$5/g
CH6 s/([01]{5})[01][01][01][01]([01]{2})/${1}1$6/g
CH7 s/([01]{6})[01][01][01][01][01]([01]{1})/${1}1$7/g
CH8 s/([01]{7})[01][01][01][01][01][01]([01])/${1}1$8/g

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

Ist etwas regex...

$1 ist der erste "hit", $2 der zweite usw. -> das, was du haben willst, muß also "in die regex-Klammer":
attr EIOBoard1_M2_CH2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]([01])([01]{6})/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
(Habe die Klammer um die erste Stelle entfernt, damit wir die umklammerte zweite Stelle wieder $1 ;) )

(Zum Weiterlesen und vorab-Testen (z.B.): https://regexr.com,da ist auch das mit den eckigen Klammern "etwas" nebenbei erläutert)
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

#22
Hi, da die Relays sich wegen den gesendeten Nullen gegenseitig ausgeschaltet hatten, habe ich das auf x umgestellt und die RegEx angepasst.
Das funktioniert bislang ohne Einschränkungen.
Hier der aktuelle Stand:


defmod EIOBoard1CH1_M2 MQTT2_DEVICE
attr EIOBoard1CH1_M2 IODev MQTT2Client
attr EIOBoard1CH1_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH1_M2 genericDeviceType switch
attr EIOBoard1CH1_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH1_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...([01])[01]{7}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH1_M2 room 82.MQTT
attr EIOBoard1CH1_M2 setList on:noArg /Home/EIOBoard1ctr setr=1xxxxxxx\
off:noArg /Home/EIOBoard1ctr setr=0xxxxxxx
attr EIOBoard1CH1_M2 setStateList on off
#
defmod EIOBoard1CH2_M2 MQTT2_DEVICE
attr EIOBoard1CH2_M2 IODev MQTT2Client
attr EIOBoard1CH2_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH2_M2 genericDeviceType switch
attr EIOBoard1CH2_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH2_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]([01])[01]{6}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH2_M2 room 82.MQTT
attr EIOBoard1CH2_M2 setList on:noArg /Home/EIOBoard1ctr setr=x1xxxxxx\
off:noArg /Home/EIOBoard1ctr setr=x0xxxxxx
attr EIOBoard1CH2_M2 setStateList on off
#
defmod EIOBoard1CH3_M2 MQTT2_DEVICE
attr EIOBoard1CH3_M2 IODev MQTT2Client
attr EIOBoard1CH3_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH3_M2 genericDeviceType switch
attr EIOBoard1CH3_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH3_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{2}([01])[01]{5}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH3_M2 room 82.MQTT
attr EIOBoard1CH3_M2 setList on:noArg /Home/EIOBoard1ctr setr=xx1xxxxx\
off:noArg /Home/EIOBoard1ctr setr=xx0xxxxx
attr EIOBoard1CH3_M2 setStateList on off
#
defmod EIOBoard1CH4_M2 MQTT2_DEVICE
attr EIOBoard1CH4_M2 IODev MQTT2Client
attr EIOBoard1CH4_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH4_M2 genericDeviceType switch
attr EIOBoard1CH4_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH4_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{3}([01])[01]{4}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH4_M2 room 82.MQTT
attr EIOBoard1CH4_M2 setList on:noArg /Home/EIOBoard1ctr setr=xxx1xxxx\
off:noArg /Home/EIOBoard1ctr setr=xxx0xxxx
attr EIOBoard1CH4_M2 setStateList on off
#
defmod EIOBoard1CH5_M2 MQTT2_DEVICE
attr EIOBoard1CH5_M2 IODev MQTT2Client
attr EIOBoard1CH5_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH5_M2 genericDeviceType switch
attr EIOBoard1CH5_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH5_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{4}([01])[01]{3}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH5_M2 room 82.MQTT
attr EIOBoard1CH5_M2 setList on:noArg /Home/EIOBoard1ctr setr=xxxx1xxx\
off:noArg /Home/EIOBoard1ctr setr=xxxx0xxx
attr EIOBoard1CH5_M2 setStateList on off
#
defmod EIOBoard1CH6_M2 MQTT2_DEVICE
attr EIOBoard1CH6_M2 IODev MQTT2Client
attr EIOBoard1CH6_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH6_M2 genericDeviceType switch
attr EIOBoard1CH6_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH6_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{5}([01])[01]{2}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH6_M2 room 82.MQTT
attr EIOBoard1CH6_M2 setList on:noArg /Home/EIOBoard1ctr setr=xxxxx1xx\
off:noArg /Home/EIOBoard1ctr setr=xxxxx0xx
attr EIOBoard1CH6_M2 setStateList on off
#
defmod EIOBoard1CH7_M2 MQTT2_DEVICE
attr EIOBoard1CH7_M2 IODev MQTT2Client
attr EIOBoard1CH7_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH7_M2 genericDeviceType switch
attr EIOBoard1CH7_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH7_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{6}([01])[01]/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH7_M2 room 82.MQTT
attr EIOBoard1CH7_M2 setList on:noArg /Home/EIOBoard1ctr setr=xxxxxx1x\
off:noArg /Home/EIOBoard1ctr setr=xxxxxx0x
attr EIOBoard1CH7_M2 setStateList on off
#
defmod EIOBoard1CH8_M2 MQTT2_DEVICE
attr EIOBoard1CH8_M2 IODev MQTT2Client
attr EIOBoard1CH8_M2 comment Channel 1 for EIOBoard1_M2, see also EIOBoard1_M2_CH2
attr EIOBoard1CH8_M2 genericDeviceType switch
attr EIOBoard1CH8_M2 model 8channel_ethernet_board_split
attr EIOBoard1CH8_M2 readingList /Home/EIOBoard1state:.* { $EVENT =~ /output...[01]{7}([01])/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr EIOBoard1CH8_M2 room 82.MQTT
attr EIOBoard1CH8_M2 setList on:noArg /Home/EIOBoard1ctr setr=xxxxxxx1\
off:noArg /Home/EIOBoard1ctr setr=xxxxxxx0
attr EIOBoard1CH8_M2 setStateList on off


Hier noch die nun nicht genutzte Variante zur Steuerung. Vielleicht kann`s jemand gebrauchen.

Die Steuerung über http mit z.B.:
set EIOBoard1_http RelaisOn 5
set EIOBoard1_http RelaisOn 3
set EIOBoard1_http RelaisOff 5

defmod EIOBoard1_http HTTPMOD http://admin:12345678@192.168.48.122 45
attr EIOBoard1_http userattr set0Name set0URL set1Name set1URL
attr EIOBoard1_http enableControlSet 1
attr EIOBoard1_http room 59.Test
attr EIOBoard1_http set0Name RelaisOn
attr EIOBoard1_http set0URL http://admin:12345678@192.168.48.122/relay.cgi?relayon$val=on
attr EIOBoard1_http set1Name RelaisOff
attr EIOBoard1_http set1URL http://admin:12345678@192.168.48.122/relay.cgi?relayoff$val=off


Und ein MQTT2 Device, dass den Status aller Relais in einzelnen Readings anzeigt:

defmod EIOBoard1v1_M2 MQTT2_DEVICE
attr EIOBoard1v1_M2 IODev MQTT2Client
attr EIOBoard1v1_M2 disable 0
attr EIOBoard1v1_M2 jsonMap input:0
attr EIOBoard1v1_M2 readingList /Home/EIOBoard1state:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr EIOBoard1v1_M2 room 59.Test,82.MQTT
attr EIOBoard1v1_M2 setList out2:0,1  {my $output = ReadingsVal($NAME,"output","00000000");; my $start = substr $output, 1;; my $end = substr $output, -6;; ( "/Home/EIOBoard1ctr setr=$start" . $EVTPART1 . $end)}
attr EIOBoard1v1_M2 userReadings out1:output:.* { $event =~ m/(.).......$/;;ReadingsVal($name,"out1",undef) ne $1 ? $1 : undef }, out2:output:.* { $event =~ m/.(.)......$/;;;;ReadingsVal($name,"out2",undef) ne $1 ? $1 : undef }, out3:output:.* { $event =~ m/..(.).....$/;;ReadingsVal($name,"out3",undef) ne $1 ? $1 : undef }, out4:output:.* { $event =~ m/...(.)....$/;;ReadingsVal($name,"out4",undef) ne $1 ? $1 : undef }, out5:output:.* { $event =~ m/....(.)...$/;;ReadingsVal($name,"out5",undef) ne $1 ? $1 : undef }, out6:output:.* { $event =~ m/.....(.)..$/;;ReadingsVal($name,"out6",undef) ne $1 ? $1 : undef }, out7:output:.* { $event =~ m/......(.).$/;;ReadingsVal($name,"out7",undef) ne $1 ? $1 : undef }, out8:output:.* { $event =~ m/.......(.)$/;;ReadingsVal($name,"out8",undef) ne $1 ? $1 : undef }


Vielen Dank für die Unterstützung!
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

Danke schon mal für die Rückmeldung...

Das mit den "xx" ist ja auch elegant, hatte ich irgendwie überlesen; dann übernehmen wir das :) .

Ich nehme mal an, es ist ok, wenn ich deine Fotos ins Wiki packe? Dazu wäre es noch gut, wir hätten eine Foto mit geschlossenem Gehäuse?

Dann hier mal die Vorschläge für die attrTemplates:
name:8channel_ethernet_board_split
filter:TYPE=MQTT2_DEVICE
desc: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!
order:W_03
par:STATETOPIC;Command topic prefix;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+state)/, ? $1 : undef }
par:CMNDTOPIC;Command topic prefix;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)state/, ? ${1}ctr : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
attr DEVICE model 8channel_ethernet_board_split
attr DEVICE setStateList on off
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
deletereading -q DEVICE (?!associatedWith).*
copy DEVICE DEVICE_CH2
copy DEVICE DEVICE_CH3
copy DEVICE DEVICE_CH4
copy DEVICE DEVICE_CH5
copy DEVICE DEVICE_CH6
copy DEVICE DEVICE_CH7
copy DEVICE DEVICE_CH8
setreading DEVICE associatedWith DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH2 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH3 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH4 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH5 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH6 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH7,DEVICE_CH8
setreading DEVICE_CH7 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH8
setreading DEVICE_CH8 associatedWith DEVICE,DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7
attr DEVICE_CH2 readingList STATETOPIC { $EVENT =~ /output...[01]([01])[01]{6}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH3 readingList STATETOPIC { $EVENT =~ /output...[01]{2}([01])[01]{5}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH4 readingList STATETOPIC { $EVENT =~ /output...[01]{3}([01])[01]{4}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH5 readingList STATETOPIC { $EVENT =~ /output...[01]{4}([01])[01]{3}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH6 readingList STATETOPIC { $EVENT =~ /output...[01]{5}([01])[01]{2}/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH7 readingList STATETOPIC { $EVENT =~ /output...[01]{6}([01])[01]/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE_CH8 readingList { $EVENT =~ /output...[01]{7}([01])/;;  my $newstate = $1 ? "on" : "off";; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }
attr DEVICE setList on:noArg CMNDTOPIC setr=1xxxxxxx\
  off:noArg CMNDTOPIC setr=0xxxxxxx
attr DEVICE_CH2 setList on:noArg CMNDTOPIC setr=x1xxxxxx\
  off:noArg CMNDTOPIC setr=x0xxxxxx
attr DEVICE_CH3 setList on:noArg CMNDTOPIC setr=xx1xxxxx\
  off:noArg CMNDTOPIC setr=xx0xxxxx
attr DEVICE_CH4 setList on:noArg CMNDTOPIC setr=xxx1xxxx\
  off:noArg CMNDTOPIC setr=xxx0xxxx
attr DEVICE_CH5 setList on:noArg CMNDTOPIC setr=xxxx1xxx\
  off:noArg CMNDTOPIC setr=xxxx0xxx
attr DEVICE_CH6 setList on:noArg CMNDTOPIC setr=xxxxx1xx\
  off:noArg CMNDTOPIC setr=xxxxx0xx
attr DEVICE_CH7 setList on:noArg CMNDTOPIC setr=xxxxxx1x\
  off:noArg CMNDTOPIC setr=xxxxxx0x
attr DEVICE_CH8 setList on:noArg CMNDTOPIC setr=xxxxxxx1\
  off:noArg CMNDTOPIC setr=xxxxxxx0
attr DEVICE readingList STATETOPIC
setreading DEVICE associatedWith DEVICE_CH1,DEVICE_CH2,DEVICE_CH3,DEVICE_CH4,DEVICE_CH5,DEVICE_CH6,DEVICE_CH7,DEVICE_CH8


name:8channel_ethernet_board_unified
filter:TYPE=MQTT2_DEVICE
desc: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!
order:W_03a
par:STATETOPIC;Command topic prefix;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+state)/, ? $1 : undef }
par:CMNDTOPIC;Command topic prefix;{ AttrVal("DEVICE","readingList","") =~ m,([^:/]+)state/, ? ${1}ctr : undef }
par:ICON;ICON as set, defaults to on;{ AttrVal("DEVICE","icon","on") }
attr DEVICE icon ICON
attr DEVICE setStateList on off
attr DEVICE jsonMap input:0
attr DEVICE readingList STATETOPIC:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr DEVICE userReadings out1:output:.* { $event =~ m/(.).......$/;;ReadingsVal($name,"out1",undef) ne $1 ? $1 : undef }, out2:output:.* { $event =~ m/.(.)......$/;;;;ReadingsVal($name,"out2",undef) ne $1 ? $1 : undef }, out3:output:.* { $event =~ m/..(.).....$/;;ReadingsVal($name,"out3",undef) ne $1 ? $1 : undef }, out4:output:.* { $event =~ m/...(.)....$/;;ReadingsVal($name,"out4",undef) ne $1 ? $1 : undef }, out5:output:.* { $event =~ m/....(.)...$/;;ReadingsVal($name,"out5",undef) ne $1 ? $1 : undef }, out6:output:.* { $event =~ m/.....(.)..$/;;ReadingsVal($name,"out6",undef) ne $1 ? $1 : undef }, out7:output:.* { $event =~ m/......(.).$/;;ReadingsVal($name,"out7",undef) ne $1 ? $1 : undef }, out8:output:.* { $event =~ m/.......(.)$/;;ReadingsVal($name,"out8",undef) ne $1 ? $1 : undef }
attr DEVICE setList out1:0,1 {my $command = $EVTPART1."xxxxxxx";; "CMNDTOPIC setr=$command"}\
  out2:0,1 {my $command = "x".$EVTPART1."xxxxxx";; "CMNDTOPIC setr=$command"}\
  out3:0,1 {my $command = "xx".$EVTPART1."xxxxx";; "CMNDTOPIC setr=$command"}\
  out4:0,1 {my $command = "xxx".$EVTPART1."xxxx";; "CMNDTOPIC setr=$command"}\
  out5:0,1 {my $command = "xxxx".$EVTPART1."xxx";; "CMNDTOPIC setr=$command"}\
  out6:0,1 {my $command = "xxxxx".$EVTPART1."xx";; "CMNDTOPIC setr=$command"}\
  out7:0,1 {my $command = "xxxxxx".$EVTPART1."x";; "CMNDTOPIC setr=$command"}\
  out8:0,1 {"CMNDTOPIC setr=xxxxxxx".$EVTPART1}
attr DEVICE model 8channel_ethernet_board_unified


(Testen wäre klasse...)

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

Die attrTemplate sind u.a. seit eben im svn. Bitte daher ggf. die Test-File entfernen, könnte sonst zu Problemen mit namensgleichen templates kommen.

Habe auch einen ganz kurzen Abschnitt ins Wiki reingebastelt; das mit dem Kabel hat halt was...

Jetzt würde mich nur interessieren, ob andere Geräte (mit dem Chipsatz?) auch "MQTT sprechen"; es gibt da ja noch diverse andere Angebote auf gängigen Marktplätzen (meistens aber dann ohne Gehäuse).
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

Beim set Board attrTemplate ... bekomme ich:

Error checking template regexp: syntax error at (eval 28349358) line 1, near "${1}ctr "

Ich mache Morgen mal ein Update und teste das dann nochmal.

1000 Dank für Deine Arbeit, so ist das eine coole Lösung!
Parallel zu dem Teil habe ich mit einem Arduino Mega/Wiznet und MQTT Sketch gearbeitet - Funktioniert auch zuverlässig. Dieses Board ist aber halt kompakter. Die MCU ist ja ein frei programmierbarer Cortex M3, da kann wohl nur getestet werden, was der Chinese implementiert hat :-)


Hier mal noch zwei Bilder fürs Wiki.
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

Danke für die Bilder - bemaßt ist super! - und die Hinweise, was noch nicht paßt mit den regex; sollte jetzt (hoffentlich vollst....) gefixt sein.

Klar ist das mit der firmware auf der MCU eine Wundertüte, aber vielleicht findet ja jemand raus, was man mit "ISP1" anfangen kann - sieht mir nach einer SPI-Programmierschnittstelle aus, aber ich bin da kein Experte, und wenn die firmware nicht nach Hause telefoniert (?), sollte das auch so gehen...

Danke auch für die nette Rückmeldung und die Geduld beim Rausarbeiten unserer Lösung  :) .

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, das sieht schon sehr gut aus.

Bei: set EIOBoard2 attrTemplate 8channel_ethernet_board_split ...
bekomme ich aber ein: EIOBoard2 attr readingList: more parameters needed

Das bezieht sich wohl auf CH1, da fehlt noch das readingList:

defmod EIOBoard2 MQTT2_DEVICE
attr EIOBoard2 IODev MQTT2Client
attr EIOBoard2 genericDeviceType switch
attr EIOBoard2 icon on
attr EIOBoard2 model 8channel_ethernet_board_split
attr EIOBoard2 room 82.MQTT
attr EIOBoard2 setList on:noArg /Home/EIOBoard1ctr setr=1xxxxxxx\
  off:noArg /Home/EIOBoard1ctr setr=0xxxxxxx
attr EIOBoard2 setStateList on off


Die anderen Devices sind ok.
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

Thx, ist jetzt hoffentlich auch vollends gefixt... ::)
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

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