ECMDDevice und zugehörige classdef für K8IO Relaiskarte

Begonnen von duke-f, 20 Januar 2016, 11:36:29

Vorheriges Thema - Nächstes Thema

duke-f

Eigentlich habe ich zwei Probleme in einem. Dabei fürchte ich, ich sehe den Wald vor lauter Bäumen nicht. Ich habe folgende Classdef für mein AVR-NET-IO mit K8IO Relaiskarte, eigentlich genau so aus dem Wiki kopiert, dachte ich:


# Uebergabeparameter HEX Adresse Port
params RelaisPort
# erst alle Ports PC.. auf Ausgang setzen und dann per Hexcode schalten
set on cmd {"io set ddr 2 ff\n\000io set port 2 %RelaisPort %RelaisPort\n"}
set on expect "OK\n"
set on postproc {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}
set off cmd {"io set ddr 2 ff\n\000io set port 2 00 %RelaisPort\n"}
set off expect "OK\n"
set off postproc {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}


Problem 1:
Leider schalten die Relais so nicht. Gehe ich über telnet direkt vor (unabh. von FHEM), dann klappt es hingegen ohne Problem. Nun habe ich erkannt, dass aus der Kette jeweils nur der erste Befehl ausgeführt wird.
Also
io set ddr2 ff
wird gemacht,
io  set port 2 %RelaisPort %RelaisPort
wird nicht ausgeführt. Ich habe das erkannt als ich probeweise den ersten Befehl durch den zweiten ersetzt habe.

Problem 2:
Setze ich nur einen Befehl ab (den Teil, den Port auf Ausgang zu setzen habe ich probehalber außerhalb FHEM per telnet gemacht) und dieser soll die Relais schalten, klappt das bei Relais 2, 3, 4, 6, 7 und 8. Relasi 5 und 10 hingegen schalten nicht. Außerhalb FHEM per telnet schalten hingegen auch diese beiden perfekt. Die Adressen habe ich gemäß Wiki definiert (1, 2, 4, 8, 10, 20, 40, 80).

Hat jemand einen oder zwei Tipps, wo ich suchen muss?
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

duke-f

Als Notlösung habe ich für das ersteProblem jeweils nur einen Befehl angesetzt. Zusätlich wird halt noch zu "on" und "of" ein "init" definiert, mit dem die Ausgänge auf Port 2 gesetzt werden.

Das zweite Problem bleibt bestehen. Dazu mal die Logs mit Verbose 5 gesetzt. Interessant vielleicht: Das Problem tritt immer für das erste und fünfte Relais der Karte auf. Ich hatte probehalber mal die Relais1 und Relais2 in FHEM getauscht, der Fehler ist mitgewandert.

Der Log für Relais1 = RELAIS 01 und Relais2 = RELAIS 02:


2016.01.23 16:31:45.921 4: WEB_10.0.0.2_54160 POST /fhem?cmd.Relais2=set%20Relais2%20on&room=ECMDDevice&XHR=1&fw_id=2295; BUFLEN:0
2016.01.23 16:31:45.923 5: Cmd: >set Relais2 on<
2016.01.23 16:31:45.926 5: ECMDDevice: Analyze command >{"io set port 2 2 2\n"}<
2016.01.23 16:31:45.928 5: AVR_NET_IO: sending command "io set port 2 2 2\n"
2016.01.23 16:31:45.929 5: SW: 696f2073657420706f72742032203220320a
2016.01.23 16:31:45.946 5: AVR_NET_IO: received answer "OK\n"
.
.
.
.
2016.01.23 16:32:03.940 4: WEB_10.0.0.2_54160 POST /fhem?cmd.Relais1=set%20Relais1%20on&room=ECMDDevice&XHR=1&fw_id=2295; BUFLEN:0
2016.01.23 16:32:03.942 5: Cmd: >set Relais1 on<
2016.01.23 16:32:03.945 5: ECMDDevice: Analyze command >{"io set port 2 1 1\n"}<
2016.01.23 16:32:03.947 5: AVR_NET_IO: command split into 3 parts.
2016.01.23 16:32:03.948 5: AVR_NET_IO: sending command "io set port 2 "
2016.01.23 16:32:03.949 5: SW: 696f2073657420706f7274203220
2016.01.23 16:32:06.955 5: Triggering AVR_NET_IO (1 changes)
2016.01.23 16:32:06.956 5: Notify loop for AVR_NET_IO FAILED


Es wird für RELAIS 01 der Befehl offensichtlich in 3 Teile gesplittet. Keine Ahnung, warum.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

duke-f

Okay, die zwei Probleme waren doch nur eines. Etwas peinlich: Hatte in der Definition für ECMD für requestSeparator 1 gesetzt - wie auch immer ich darauf kam, als ich es einrichtete. Damit ist dann alles klar.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite

larrysteward

Hallo duke-f,

na herzlichen Glückwunsch. Ich hatte gerade meine Relais auch mal in Betrieb genommen und konnte deine Probleme gar nicht nachvollziehen. Das einzige, das mir aufgefallen ist, ist das du anscheinend die Adressen einstellig übergibst, also 2 statt 02, was aber auch zu funktionieren scheint.

Das mit dem RequestSeparator ist mir persönlich etwas suspekt, da ich die Funktion auch nach lesen der FHEM reference nicht wirklich verstanden habe. Kommt vielleicht noch, wenn ich es mal brauche.

Gruß,
Larry
Raspberry Pi 2 B mit Raspberry Pi OS + FHEM, 2 x NET-IO mit Ethersex, nanoCUL433 und nanoCUL868 mit culw
e3q MAX! Thermostate, MAX! Fensterkontakte, Intertechno Funksteckdosen, HMIP-Geräte via Raspberrymatic, Tasmota geflashte Sonoff-Zwischenstecker

duke-f

Ja, das mit einstellig oder zweistellig hatte ich auch probiert - wie fast alles denkbare, um den Fehler zu kommen. Dass es gar nicht am Relais-Modul sondern am EMCDDevice liegen konnte kam mir gar nicht in den Sinn. Erst als ich nochmal die Log gründlich Schritt für Schritt durchging.

Ich glaube, dass ich damals meinte, RequestSeparator würde mit 1 aktiviert und mit 0 deaktiviert. Hab die Doku offensichtlich auch an der Stelle nicht kapiert.
Cubietruck, 3 Raspberry Pis,
CUL868, RFXtrx433, CUL433, SCC868, HM-USB,
IRTrans, EZcontrol XS1, IguanaWorks USB IR Transceiver
ESPEasy, Fritz!Box, Samsung TV+BD, LMS, Squeezelite