8fach I/O Board mit MQTT2_Device

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

Vorheriges Thema - Nächstes Thema

cberl

Hallo in die Runde,

ich habe mir in der Bucht ein 8x I/O Relais Board für 60€ geholt:
https://www.ebay.de/itm/8in8-out-Network-Relay-Controller-WEB-TCP-UDP-Support-Offline-Timer-MQTT-xs90/153347308210?hash=item23b4363ab2:g:RL0AAOSwOShcRWlR
Das WebIf kann auf Englisch gestellt werden.

Die Relais kann ich per http steuern und abfragen. Nun bin ich noch auf eine versteckte Konfigseite für MQTT gestoßen, wo ich den Broker vom Chinamann auf meinen eigenen drehen kann.
Das Topic (per Default die Seriennummer 0218091547293896) kann ich auch (bis max. 16 Zeichen) anpassen. Mehr geht da leider nicht. 

Ein Subscribe funktioniert:
Bei einem Schaltvorgang sendet das Teil einen JSON
Wenn ein Relay bzw. Input on ist, steht die jeweilige Ziffer auf 1:

Alles aus:                                                {"cmd":"post","output":"00000000","input":"00000000","sn":"0218091547293896"}
Relais3 per WebIf auf On gesetzt:             {"cmd":"post","output":"00100000","input":"00000000","sn":"0218091547293896"}
Relais2 mit Eingang am Board geschalten: {"cmd":"post","output":"01000000","input":"01000000","sn":"0218091547293896"}

Ein Publish ist mir aber noch nicht gelungen (kann ja die Relais notfalls per http steuern).
Gibt wohl auch eine App mit der das Teil über die Chinacloud gesteuert werden kann. Verschlüsselung gibt`s da nicht. Also könnte ich das vielleicht sniffen.
Mangels Chin. Sprachkentnissen habe ich das aber erstmal gelassen.

Für das Board habe ich mir ein MQTT2 Device angelegt, welches mir auch schön den JSON zerlegt:

Internals:
   CFGFN     
   DEVICETOPIC EIOBoard1
   FUUID      5e28b7a8-f33f-51cc-8ed1-1634b5eb89a81169
   IODev      MQTT2Client
   LASTInputDev MQTT2Client
   MQTT2Client_MSGCNT 1146
   MQTT2Client_TIME 2020-01-23 17:02:41
   MSGCNT     1146
   NAME       EIOBoard1
   NR         123583
   STATE      ???
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-01-23 17:02:41   cmd             post
     2020-01-23 17:02:41   input           00000000
     2020-01-23 17:02:41   output          00000000
     2020-01-23 17:02:41   sn              0218091547293896
Attributes:
   IODev      MQTT2Client
   readingList 0218091547293896state:.* { json2nameValue($EVENT) }
   room       82.MQTT


Nun hätte ich gerne noch jedes Zeichen von input und output in einem einzelnen Reading.
Wie bekomme ich das am Besten hin? Hat vielleicht noch jemand eine Idee zum Publish?

Bye Chris
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

rudolfkoenig

ZitatNun hätte ich gerne noch jedes Zeichen von input und output in einem einzelnen Reading.
Mir faellt dazu ein langes userReadings ein:attr EIOBoard1 userReadings in1:input:.* { $event =~ m/(.).......$/;;$1 }, in2:input:.* { $event =~ m/.(.)......$/;;$1 }, in3:input {usw....


ZitatHat vielleicht noch jemand eine Idee zum Publish?
Mit MQTT2_SERVER koennte man das subscription der Gegenseite ausgeben (list .* subscriptions), und dann raten.
Was Vergleichbares duerfte auch bei jedem externen MQTT-Server gehen.

Beta-User

MMn. wäre die "Vollversion", das ganze mit einem myUtils-Code auszuwerten. Soweit ich das verstanden habe, kommen ja bei jeder Änderung immer alle Ifos, so dass man nicht unterscheiden kann, was neu und was alt ist...

Der myUtils-Code müßte dann aussortieren, was nicht geändert ist, und dann eben für jeden Kanal ein eigenes Reading setzen, indem nur die entsprechenden Werte in den Rückgabehash übernommen werden.

Etwas in diese Richtung geht tasmota_use_DS18x20_id, aber das hier wäre deutlich komplexer...

(Wäre m.E. aber lohnenswert, das "richtig" zu machen, denn es ist was mit einem Kabel...! Schade, dass die firmware nicht dokumentiert ist, aber evtl. findet sich auch jemand, der rausfindet, was es für eine mcu ist und wie man die flasht ;) .)
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

Die Lösung mit dem userreading funktioniert prima. Danke.

Und Ja - Ich bin auch ein großer Fan von verkabelter Technik.

Eine andere Firmware dürfte schwierig werden: Da ist ein Cortex-m3 drauf und auf dem kleinen Kamerad steht 7ca6xtg3/83848ks0, Optokoppler für die Eingänge - Die Platine ist ordentlich aufgebaut.
Mit http und mqtt kann ich das Teil ausreichend gut steuern & auslesen. Eigentlich ein cooles Teil für 57€.
Ins Internet lasse ich es aber nicht :-)

Anbei noch ein paar Bilder.
Es gibt auch ein PDF zu der TCP Schnittstelle auf Chinesisch. Mit dem Google Translator ist das aber recht verständlich.
Vielleicht kanns noch jemand gebrauchen:

Die Relay werden so geschalten:
http://192.168.48.122/relay_en.cgi?relayon1=on
http://192.168.48.122/relay_en.cgi?relayoff1=off
Die mqtt Seite gibts unter http://192.168.48.122/zm.cgi

Chris
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

cberl

#4
Das Teil kann jetzt komplett über mqtt gesteuert werden:

Das Subscribe auf: 0218091547293896state
Und ein Publish auf z.B. 0218091547293896ctr setr=1001000
schaltet das erste und das vierte Relais.

Ein x lässt das jeweilige Relais im ursprünglichen Zustand z.B. xxxx1xxx schaltet dann nur das Relais 5 ein
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

Kannst du bitte nochmal ein RAW-list von dem ganzen Device einstellen?

Das Ding ist wirklich interessant, und irgendwie werde ich den Verdacht nicht los, dass das heute noch nicht so richtig ausentwickelt ist...

Du hast ja z.B. eine Aktualisierung des Zeitstempels aller In- und Outputs, wenn sich nur einer ändert, oder? Da ist bestimmt was zu machen...!
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

Da ist unbestritten noch Brach liegendes Potential da.

Hier das List:

Internals:
   DEVICETOPIC EIOBoard1_M2
   FUUID      5e28b7a8-f33f-51cc-8ed1-1634b5eb89a81169
   IODev      MQTT2Client
   LASTInputDev MQTT2Client
   MQTT2Client_MSGCNT 60
   MQTT2Client_TIME 2020-02-10 18:25:22
   MSGCNT     60
   NAME       EIOBoard1_M2
   NR         1473
   STATE      Input: 00000000 Relais: 00000000
   TYPE       MQTT2_DEVICE
   READINGS:
     2020-02-10 18:25:22   cmd             post
     2020-02-10 18:25:22   in1             0
     2020-02-10 18:25:22   in2             0
     2020-02-10 18:25:22   in3             0
     2020-02-10 18:25:22   in4             0
     2020-02-10 18:25:22   in5             0
     2020-02-10 18:25:22   in6             0
     2020-02-10 18:25:22   in7             0
     2020-02-10 18:25:22   in8             0
     2020-02-10 18:25:22   input           00000000
     2020-02-10 18:25:22   out1            0
     2020-02-10 18:25:22   out2            0
     2020-02-10 18:25:22   out3            0
     2020-02-10 18:25:22   out4            0
     2020-02-10 18:25:22   out5            0
     2020-02-10 18:25:22   out6            0
     2020-02-10 18:25:22   out7            0
     2020-02-10 18:25:22   out8            0
     2020-02-10 18:25:22   output          00000000
     2020-02-10 18:25:22   sn              /Home/EIOBoard1
Attributes:
   IODev      MQTT2Client
   readingList /Home/EIOBoard1state:.* { json2nameValue($EVENT) }
   room       82.MQTT
   stateFormat Input: input Relais: output
   userReadings in1:input:.* { $event =~ m/(.).......$/;;$1 }, in2:input:.* { $event =~ m/.(.)......$/;;$1 }, in3:input:.* { $event =~ m/..(.).....$/;;$1 }, in4:input:.* { $event =~ m/...(.)....$/;;$1 }, in5:input:.* { $event =~ m/....(.)...$/;;$1 }, in6:input:.* { $event =~ m/.....(.)..$/;;$1 }, in7:input:.* { $event =~ m/......(.).$/;;$1 }, in8:input:.* { $event =~ m/.......(.)$/;;$1 } , out1:output:.* { $event =~ m/(.).......$/;;$1 }, out2:output:.* { $event =~ m/.(.)......$/;;$1 }, out3:output:.* { $event =~ m/..(.).....$/;;$1 }, out4:output:.* { $event =~ m/...(.)....$/;;$1 }, out5:output:.* { $event =~ m/....(.)...$/;;$1 }, out6:output:.* { $event =~ m/.....(.)..$/;;$1 }, out7:output:.* { $event =~ m/......(.).$/;;$1 }, out8:output:.* { $event =~ m/.......(.)$/;;$1 }


Bislang gibts nur den Status der Ein- & Ausgänge.

Das Publish über setlist ist bei 8x on & off recht unübersichtlich.
Eine einfache Möglichkeit wäre ja, für jedes Relais ein eigenes Device anzulegen. Viel schicker wäre aber ein Device für alle Relais.

Hier ein Publish: /Home/EIOBoard1ctr setr=xx1xxxxx
Und hier das Subscribe: /Home/EIOBoard1state/#   {"cmd":"post","output":"00100000","input":"00000000","sn":"/Home/EIOBoard1"}

Damit es nicht zu einfach wird: Die Eingänge schalten direkt die Ausgänge. Wenn ein Eingang auf high / on liegt, schaltet das Relais auf on.
Kommt nun per mqtt ein off, gewinnt der letzte Befehl also hier mqtt. Das sieht dann so aus:
{"cmd":"post","output":"00000000","input":"00100000","sn":"/Home/EIOBoard1"}

Und anders herum: Bei einem on per mqtt kann das auch wieder über ein on und off am Eingang abgeschalten werden. Hoffe, ich habe mich verständlich ausgedrückt :-)



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

rudolfkoenig

ZitatViel schicker wäre aber ein Device für alle Relais.
Das bedeutet viel Bastelarbeit, weil alle Voreinstellungen in FHEM fuer Einzelschalter ausgelegt sind.
Ich sehe z.Bsp. bei Mehrfachschalter "Herausforderungen" bei der FHEMWEB Anzeige, SetExtensions oder bei den Sprachassistenten.

Fuer ein gute FHEM-Integration muesste das Geraet ueber ein bridge-device in Einzelschalter aufgesplittet werden: das ist zwar Arbeit, dafuer sind die anderen Sachen schon geloest. Die Frage ist, ob der Aufwand sich lohnt, d.h. viele Benutzer die o.g. Features haben wollen.

Beta-User

Na ja, am Ende muß man bei dem Teil wohl immer alle einzelnen Relaisstände kennen, sonst kann man den Sendecommand nicht bauen, oder? Dann ist es (auch angesichts der nicht allzuhohen zu erwartenden Nutzerzahlen) m.E. einfacher, ein Einheitsdevice zu haben und die einzelnen Kanäle z.B. über je einen ReadingsProxy zu visualisieren...

Da die inputs immer die outputs schalten, sich aber nicht getrennt nutzen lassen (?), würde ich vorschlagen, die zu ignorieren, wichtig ist eigentlich nur, dass der out-Zustand korrekt ist, oder?

Dann könnte man z.B. jsonMap verwenden und input wegfiltern:

attr EIOBoard1_M2  readingList /Home/EIOBoard1state:.* { json2nameValue($EVENT,'',$JSONMAP) }
attr EIOBoard1_M2 jsonMap input:0

Man könnte den Rest auch über eine myUtils-sub machen, oder weiter über die userReadings. Sowas hier (ungetestet) sollte nur Änderungen durchlassen:
out1:output:.* { $event =~ m/(.).......$/;;ReadingsVal($name,"out1",undef) ne $1 ? $1 : undef }

Für die setList wird es "spaßiger", da könnten wir z.B. substr verwenden, um den aus dem "output"-Reading zusammenzubasteln.

Also z.B. (ebenfalls ungetestet) in diese Richtung:
attr EIOBoard1_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  }
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

#9
Stimmt - der Zustand der Eingänge ist nicht wirklich wichtig. Die Eingänge haben letzendlich immer Einfluss auf die Ausgänge.

Das userReadings funktioniert tadellos, es wird nun nur das jeweilige Reading aktualisiert.
Beim setList gehts noch durcheinander:

set EIOBoard1_M2 out2 1 - schaltet Relais8 Ein
set EIOBoard1_M2 out2 1 - Relais8 bleibt Ein und Relais7 Ein
set EIOBoard1_M2 out2 1 - Relais8+7 bleiben Ein und Relais6 Ein
set EIOBoard1_M2 out2 1 - Relais8+7+6 bleiben Ein und Relais5 Ein
set EIOBoard1_M2 out2 1 - Relais8+7+6+5 bleiben Ein und Relais4 Ein
set EIOBoard1_M2 out2 0 - Relais8+7+6+5+4 bleiben Ein und Relais3 Ein
set EIOBoard1_M2 out2 0 - Relais8+7+6+5+4+3 bleiben Ein und Relais2 Ein
..

Internals:
   CFGFN     
   DEVICETOPIC EIOBoard1_M2
   FUUID      5e41ad70-f33f-51cc-62f7-9eb635047492dbe4
   IODev      MQTT2Client
   LASTInputDev MQTT2Client
   MQTT2Client_MSGCNT 142
   MQTT2Client_TIME 2020-02-10 21:09:16
   MSGCNT     142
   NAME       EIOBoard1_M2
   NR         31321
   STATE      out2
   TYPE       MQTT2_DEVICE
   JSONMAP:
     input      0
   READINGS:
     2020-02-10 21:09:16   cmd             post
     2020-02-10 20:49:05   out1            0
     2020-02-10 21:09:02   out2            1
     2020-02-10 21:08:50   out3            0
     2020-02-10 21:09:01   out4            0
     2020-02-10 21:06:44   out5            0
     2020-02-10 21:06:44   out6            0
     2020-02-10 21:05:16   out7            0
     2020-02-10 21:03:13   out8            0
     2020-02-10 21:09:16   output          01000000
     2020-02-10 21:09:16   sn              /Home/EIOBoard1
     2020-02-10 21:05:16   state           out2
Attributes:
   IODev      MQTT2Client
   jsonMap    input:0
   readingList /Home/EIOBoard1state:.* { json2nameValue($EVENT,'',$JSONMAP) }
   room       82.MQTT
   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)}
   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 }

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

Hm, da fehlte wohl noch eine 0, in substr...
my $start = substr $output, 0, 1

Sollte mit regex eigentlich auch einfacher gehen (mal wieder ungetestet):
setList    out2:0,1  {my $output = ReadingsVal($NAME,"output","00000000");; $output = $output =~ "s/([01]{1})[01]([01]{6})/\\1$EVTPART1\\2/g";; "/Home/EIOBoard1ctr setr=$output"}
Und nachdem ich das überschlafen habe, gebe ich Rudi recht: wir sollten direkt versuchen, da 8 einkanalige MQTT2-Devices draus zu basteln. Muß mal etwas hirnen, aber das sollte eigentlich kein größeres Problem sein.

Bitte zukünftig RAW-lists (list -r oder der entsprechende Button unter dem Device), das ist für mich einfacher zu transferieren...
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

#11
Zum Testen mal ein Versuch mit zwei Kanälen:

name:8channel_ethernet_board_split
filter:TYPE=MQTT2_DEVICE
desc:Configures a 8 channel relay board see <a href="https://forum.fhem.de/index.php/topic,107536.msg1016379.html#msg1016379">Forum Thread</a> for more info about the hardware and basic MQTT configuration.<br>NOTE: This will create some new devices for the other channels!
order:C_01
par:STATETOPIC;State topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+state):, ? "$1" : undef }
par:CMNDTOPIC;Command topic prefix, without trailing /;{ AttrVal("DEVICE","readingList","") =~ m,([^:]+)state:, ? "${1}ctr" : undef }
attr DEVICE model 8channel_ethernet_board_split
attr DEVICE readingList \
  STATETOPIC:.* { $EVENT =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  STATETOPIC:.* { $EVENT =~ m,output...([01])([01]{7}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
attr DEVICE setList \
  off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/[01]([01]{7})/0\\1/g;; "CMNDTOPIC setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/[01]([01]{7})/1\\1/g;; "CMNDTOPIC setr=$output"}
attr DEVICE comment Channel 1 for DEVICE, see also DEVICE_CH2
deletereading -q DEVICE (?!associatedWith).*
attr DEVICE setStateList on off
setreading DEVICE associatedWith DEVICE_CH2
set DEVICE attrTemplate mqtt2_speech_recognition_type_switch
attr DEVICE model 8channel_ethernet_board_split
copy DEVICE DEVICE_CH2
attr DEVICE_CH2 readingList \
  STATETOPIC:.* { $EVENT =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  STATETOPIC:.* { $EVENT =~ m,output...[01]([01])([01]{6}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
attr DEVICE_CH2 setList \
  off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/([01])[01]([01]{6})/\\10\\2/g;; "CMNDTOPIC setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");; $output =~ s/([01])[01]([01]{6})/\\11\\2/g;; "CMNDTOPIC setr=$output"}


Hoffe mal, das mit dem Regexen klappt, ich bin da immer noch etwas unsicher, was wo landet... ::)

Anleitung für den Umgang mit dem Code an sich ist hier: https://wiki.fhem.de/wiki/AttrTemplate
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

Cool, es nimmt Gestalt an. Er landet aber noch nicht ganz richtig:

set EIOBoard1_M2 attrTemplate 8channel_ethernet_board_split /Home/EIOBoard1state /Home/EIOBoard1ctr
#
set EIOBoard1_M2 on -> schaltet Relays1 und Relays3 Ein

/Home/EIOBoard1ctr setr=1\1
/Home/EIOBoard1state {"cmd":"setr","output":"10100000","input":"00000000","sn":"/Home/EIOBoard1"}
/Home/EIOBoard1state {"cmd":"post","output":"10100000","input":"00000000","sn":"/Home/EIOBoard1"}
#
>list -r EIOBoard1_M2
define 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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01])([01]{7}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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-11 21:48:23 associatedWith EIOBoard1_M2_CH2
setstate EIOBoard1_M2 2020-02-11 21:58:52 output 10100000
setstate EIOBoard1_M2 2020-02-11 21:58:52 state on


set EIOBoard1_M2 off -> Relays1 AUS, Relays3 bleibt EIN

/Home/EIOBoard1ctr setr=0\1
/Home/EIOBoard1state {"cmd":"setr","output":"00100000","input":"00000000","sn":"/Home/EIOBoard1"}
/Home/EIOBoard1state {"cmd":"post","output":"00100000","input":"00000000","sn":"/Home/EIOBoard1"}

>list -r EIOBoard1_M2
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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01])([01]{7}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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 off
setstate EIOBoard1_M2 2020-02-11 21:48:23 associatedWith EIOBoard1_M2_CH2
setstate EIOBoard1_M2 2020-02-11 22:02:54 output 00100000
setstate EIOBoard1_M2 2020-02-11 22:02:54 state off


set EIOBoard1_M2_CH2 on -> schaltet Relays2 und Relays3 EIN

/Home/EIOBoard1ctr setr=\11\2
/Home/EIOBoard1state {"cmd":"setr","output":"01101000","input":"00000000","sn":"/Home/EIOBoard1"}
/Home/EIOBoard1state {"cmd":"post","output":"01100000","input":"00000000","sn":"/Home/EIOBoard1"}

>list -r EIOBoard1_M2_CH2
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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...[01]([01])([01]{6}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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})/\\10\\2/g;;;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/\\11\\2/g;;;; "/Home/EIOBoard1ctr setr=$output"}
attr EIOBoard1_M2_CH2 setStateList on off

setstate EIOBoard1_M2_CH2 on
setstate EIOBoard1_M2_CH2 2020-02-11 22:06:59 output 01100000
setstate EIOBoard1_M2_CH2 2020-02-11 22:06:59 state on


set EIOBoard1_M2_CH2  off -> Relays2 bleibt EIN, Relays3 AUS

/Home/EIOBoard1ctr setr=\10\2
/Home/EIOBoard1state {"cmd":"setr","output":"01001000","input":"00000000","sn":"/Home/EIOBoard1"}
/Home/EIOBoard1state {"cmd":"post","output":"01000000","input":"00000000","sn":"/Home/EIOBoard1"}
>list -r EIOBoard1_M2_CH2
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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...[01]([01])([01]{6}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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})/\\10\\2/g;;;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/\\11\\2/g;;;; "/Home/EIOBoard1ctr setr=$output"}
attr EIOBoard1_M2_CH2 setStateList on off

setstate EIOBoard1_M2_CH2 on
setstate EIOBoard1_M2_CH2 2020-02-11 22:10:10 output 01000000
setstate EIOBoard1_M2_CH2 2020-02-11 22:10:10 state on



Seltsam ist auch die fünfte Ziffer in 01001000 bei setr, im post passt es dann aber wieder
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

#13
 ::) Hmm, so ist das, wenn man Dinge aus dem INet kopiert und nicht alles selbst vorab testet...

Die Ersetzungsschreibweise \\ für die Parameter ist wohl Mist, das muß wohl "ganz normal" $1 bzw. $2 sein:
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_CH2 setList off:noArg  { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/$10$2/g;;;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/$11$2/g;;;; "/Home/EIOBoard1ctr setr=$output"}


Und bei der readingList zu "state" muß ich auch nochmal nachbessern, da muß erst nachgesehen werden, was der derzeitige ist. Ungetestetes Muster:
  /Home/EIOBoard1state:.* { my $newstate = $EVENT =~ m,output...([01])([01]{7}), ? $1 ? "on" : "off";;;; $newstate eq ReadingsVal($NAME,"state","unknown") ? undef : {"state"=>$newstate} }

Kannst du auch (wenn es funktioniert, dann) nochmal testen, ob man wirklich so viele escapte ; braucht (";;"). Kommt mir etwas viel vor...

Stimme aber zu: Jetzt ist es auf dem richtigen Weg, Danke für die Geduld!
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

Vielen Dank, dass Du Dich diesem Thema annimmst. Was auch immer ich dazu beitragen kann, das mache ich gerne.

Bei dem readingList bekomme ich einen Fehler:

syntax error at (eval 12023334) line 1, at EOF
Global symbol "$newstate" requires explicit package name (did you forget to declare "my $newstate"?) at (eval 12023334) line 1.

Beim setList werden in der GUI nur zwei ;; angezeigt. Im RAW hingegen ;;;;

CH1 funktioniert:

>set EIOBoard1_M2 on
/Home/EIOBoard1ctr setr=10000000
/Home/EIOBoard1state {"cmd":"setr","output":"10000000","input":"00000000","sn":"/Home/EIOBoard1"}

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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...([01])([01]{7}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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-11 21:48:23 associatedWith EIOBoard1_M2_CH2
setstate EIOBoard1_M2 2020-02-12 16:32:05 output 10000000
setstate EIOBoard1_M2 2020-02-12 16:32:05 state on

>set EIOBoard1_M2 off
/Home/EIOBoard1ctr setr=00000000
/Home/EIOBoard1state {"cmd":"setr","output":"00000000","input":"00000000","sn":"/Home/EIOBoard1"}


Bei CH2 schaltet das Relays nicht und es werden nur sechs Ziffern gesendet.
Das setList von CH2 sieht auch ganz anders aus:
CH1: $output =~ s/[01]([01]{7})/0$1/g;;
CH2: $output =~ s/([01])[01]([01]{6})/$10$2/g;;


>set EIOBoard1_M2_CH2 on
/Home/EIOBoard1ctr setr=000000
/Home/EIOBoard1state {"cmd":"setr","output":"00000000","input":"00000000","sn":"/Home/EIOBoard1"}

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 =~ m,output...([01]{8}), ? {"output"=>$1} : undef }\
  /Home/EIOBoard1state:.* { $EVENT =~ m,output...[01]([01])([01]{6}), ? $1 ? {"state"=>"on"} : {"state"=>"off"} : undef }
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})/$10$2/g;;;; "/Home/EIOBoard1ctr setr=$output" }\
  on:noArg   { my $output = ReadingsVal($NAME,"output","00000000");;;; $output =~ s/([01])[01]([01]{6})/$11$2/g;;;; "/Home/EIOBoard1ctr setr=$output"}
attr EIOBoard1_M2_CH2 setStateList on off

setstate EIOBoard1_M2_CH2 off
setstate EIOBoard1_M2_CH2 2020-02-12 16:32:57 output 00000000
setstate EIOBoard1_M2_CH2 2020-02-12 16:32:57 state off



>set EIOBoard1_M2_CH2 off
/Home/EIOBoard1ctr setr=000000
/Home/EIOBoard1state {"cmd":"setr","output":"00000000","input":"00000000","sn":"/Home/EIOBoard1"}




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

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

dobiwan

Hallo zusammen,
ich habe ein dingtain Zwei Kanal Netzwerk Relay. Ich konnte das Relay über MQTT erfolgreich einbinden. Leider bekomme ich das mit dem Schalten nicht hin.
Mit meiner Set_List bekomme ich zwar die Möglichkeit zwischen On und Off umzuschalten, aber irgendwie bekomme ich nicht das Ergebnis , dass ich möchte.

Readingslist
myBroker:/dingtian/relay1225/out/r1:.* r1
myBroker:/dingtian/relay1225/out/r2:.* r2
myBroker:/dingtian/relay1225/out/i1:.* i1
myBroker:/dingtian/relay1225/out/i2:.* i2
myBroker:/dingtian/relay1225/out/relay1:.* { json2nameValue($EVENT) }
myBroker:/dingtian/relay1225/out/relay2:.* { json2nameValue($EVENT) }
myBroker:/dingtian/relay1225/out/input1:.* { json2nameValue($EVENT) }
myBroker:/dingtian/relay1225/out/input2:.* { json2nameValue($EVENT) }
myBroker:/dingtian/relay1225/out/ip:.* ip
myBroker:/dingtian/relay1225/out/sn:.* sn
myBroker:/dingtian/relay1225/out/mac:.* mac
myBroker:/dingtian/relay1225/out/input_cnt:.* input_cnt
myBroker:/dingtian/relay1225/out/relay_cnt:.* relay_cnt
myBroker:Advantech/DEVNAME/ctl/do1:.* { json2nameValue($EVENT) }
myBroker:/dingtian/relay1225/in/r1:.* r1
myBroker:cmnd/dingtian/relay1225/in/r1:.* r1
myBroker:cmnd/dingtian/relay1225/in/r2:.* r2

attr Digitain_2_Channel_Relay setList out1:on,off cmnd/dingtian/relay1225/in/r1 ON, off cmnd/dingtian/relay1225/in/r1 OFF\
out2:on,off cmnd/dingtian/relay1225/in/r2 ON, off cmnd/dingtian/relay1225/in/r2 OFF

Beta-User

Bitte dazu einen neuen Thread aufmachen und die "was soll ich liefern?"-Threads beachten (einschl. der Formatierungshinweise (v.a. Code-Tags)). Die Hard- und Firmware scheint komplett unterschiedlich zu sein, das paßt mit ziemlicher Sicherheit nicht zusammen.

Dann: Das sieht mir nach MQTT2_CLIENT als IO aus, und die readingList ist vermutlich durch irgendwelche Versuche ergänzt worden?

Tipp: Ggf. das Teil erst mal über einen MQTT2_SERVER verbinden, dann bekommt man auch "subscriptions" angezeigt (falls (!?!) es keine Doku dazu gibt.
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