Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen

Begonnen von Heffa, 10 Januar 2016, 13:53:54

Vorheriges Thema - Nächstes Thema

Tom_S

@larrysteward

ist auf jeden Fall der richtige Ansatz. Das $dez brauchst du nicht extra und dann noch in on und off umwandeln
my $hex = "$_";\
$hex =~ s/port 3: //;\
$hex =~ s/\n//;\
my $retval = (hex($hex) & 0x%RelaisPort) > 0 ? "on" : "off" ;\


LG
Tom_S
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

larrysteward

Hallo Tom_S,

meine Originalaufgabenstellung ist einen Schritt größer, da meine Schaltung eine 1 für aus und 0 für an ergibt. Darum habe ich eine Krücke gebastelt, die mit der Addition von 18446744073709551614 nicht gerade elegant aussieht. Hast du dafür auch einen Verschlankungsvorschlag?
get read cmd {"io get pin 0\n"}
get read expect ".*"    #"port 0: 0x\d+\n"
get read postproc {\
my $hex = "$_";\
$hex =~ s/port 0: //;\
$hex =~ s/\n//;\
my $dez = hex($hex);\
my $var = $dez & 1;\
$var += 18446744073709551614;\
my $retval = ~$var;\
}

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

Tom_S

also wenn ich das richtig verstanden habe, dann brauchst du in der Zeile
my $retval = (hex($hex) & 0x%RelaisPort) > 0 ? "on" : "off" ;\
nur on und off vertauschen. Dann ist > 0 off und 0 on.

LG
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

larrysteward

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

Heffa

Hallo zusammen,

habe jetzt endlich wieder Zeit mich um das Thema zu kümmern.
Viele Dank für eure Unterstützung.

Die Abfrage klappt jetzt grundsätzlich.

Sieht jetzt so aus:

# Uebergabeparameter HEX Adresse Port
params RelaisPort

#  erst alle Ports PC.. auf Ausgang setzten 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";}

get state cmd {"io get pin 2\n"}    # Pin 2 = Port C
get state expect ".*"
get state postproc {\
my $hex = "$_";\
$hex =~ s/port 2: //;\
$hex =~ s/\n//;\
my $retval = (hex($hex) & 0x%RelaisPort) > 0 ? "on" : "off" ;\
}

Leider bin ich noch zu unerfahren um das Ergebnis (status on, status off) was ich zurück bekomme, in ein (on, off) zu verwandeln, damit das Icon richtig angezeigt wird.

Für einen Hinweis wie ich das machen muss wäre ich sehr dankbar.

Gruß
Heffa

Heffa

Hallo,
die Abfrage klappt jetzt dank eure Hilfe.
Jetzt habe ich nur noch das Problem mit der Antwort state on / state off. Damit wird das Icon nicht richtig dargestellt.

Hat jemand eine Idee wie ich die Antwort state on in on wandeln kann?

Danke
Heffa

Gesendet von meinem GT-P7501 mit Tapatalk


Heffa

Hallo,

ich habe jetzt folgendes jetzt folgendes gemacht damit das Icon auch richtig dargestellt wird.


define FegerLampe at +*00:00:01 { if (fhem("get Feger state") eq "state on") { fhem("set Feger on") } else { fhem("set Feger off") } }


Das funktioniert zwar aber ich suche nach eine Lösung wo die Relais nicht geschaltet werden sondern nur das Icon richtig dargestellt wird.
Der Befehl "get Feger state" liefert "state on / state off" und der Befehl "set Feger on" liefert "on ok".
Ich versuche jetzt das "state on" in "on ok" zu wandeln, damit das Icon richtig dargestellt wird.

Ich habe schon einige Sachen probiert, hat aber alles nicht geklappt.

Hier sind zwei versuche:

das hier klappt nicht

attr Feger eventMap { dev=>{"state on"=>"on ok"}, dev=>{"state off"=>"off ok"} }


das auch nicht (hier blinkt manchmal das Icon auf, wird aber wieder vom "state on" überschrieben

define FegerLampe at +*00:00:01 { if (fhem("get Feger state") eq "state on") { fhem("setstate Feger on") } else { fhem("setstate Feger off") } }


Für bessere Lösungen wäre ich sehr dankbar.

Heffa

Tom_S

sorry, dachte du hast es längst gelöst
probiere mal
attr <NAME> devStateIcon .*on:on:off .*off:off:on

<NAME> ist dein Relais

viel Erfolg
RaspberryPI2 + pilight, 3x AVR-NetIO, LW12, LW12HX, LW12FC; MAX-Lan, ESP8266, Arduino, H801, Neopixel, Solaredge, Modbus

Heffa

Hallo Tom_S,

vielen Dank.

Genau das habe ich gesucht.

Habe leider nicht immer die Zeit mich um das Fine-tuning in meine FHEM zu kümmern, deshalb sind des öfteren größere Lücken in meine Konversationen. :(

Heffa