FHEM Forum

FHEM - Hausautomations-Systeme => Sonstige Systeme => Thema gestartet von: Heffa am 10 Januar 2016, 13:53:54

Titel: Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 10 Januar 2016, 13:53:54
Hallo,

ich habe in mein System die AVR-NET-IO K8IO eingebunden und alles klapp wie am Schnürchen, (Relais Schalten, ADC Abrfgen).

Jetzt habe ich jedoch noch eine Herausforderung zu bewältigen.
Ich habe seit tagen das Netz nach eine Lösung durchgesucht, leider ohne Erfolg.

Ich möchte gerne den Status (ON / OFF) eines Relais abfragen, um weitere Abhängigkeiten je nach Status zu beeinflussen.

Alles wes ich bisher gefunden habe ist wie man die Relais ein und ausschaltet.

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

Danke

Heffa

Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Klaus0815 am 10 Januar 2016, 16:18:26
Du schaltest doch die Relais nur aus FHEM aus ? Oder hast Du noch andere Schalter angeschlossen ?
FHEM weiss doch dann den Zustand der Relais schon ?
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 11 Januar 2016, 07:23:34
Ja das stimmt schon. Beim Neustart des Systems würde ich gerne den Status aktualisieren bevor etwas geschaltet wurde, manche Relais schlten sehr selten.
Ich würde auch gerne den Status in diversen "if" Abfragen verwenden.

Heffa

Gesendet von meinem SM-G900F mit Tapatalk

Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: alexus am 11 Januar 2016, 17:26:33
Hallo,

ich nehme mal an, Du hast den AVR-NET-IO über ECMD in FHEM eingebunden?
http://www.fhemwiki.de/wiki/AVR-NET-IO (http://www.fhemwiki.de/wiki/AVR-NET-IO)
In Deiner fhem.cfg kannst Du für jedes Releais ein Device erstellen (IP-Adresse bitte ergänzen):
define netsw ECMD telnet xxx.xxx.xxx.xxx:50290
attr netsw classdefs relais=/opt/fhem/relais.classdef
define myRelais ECMDDevice relais 1


Falls keine Ethersex-Firmware aufgespielt wurde, müsste man für die Relais eine Datei "relais.classdef" erstellen, ungefähr so:
# Uebergabeparameter AVR-NET-IO Port
params RelaisPort
set on cmd {"SETPORT %RelaisPort.1\n"}
set on expect "ACK\n"
set off cmd {"SETPORT %RelaisPort.0\n"}
set off expect "ACK\n"
get state cmd {"GETPORT %RelaisPort\n"}
get state expect "ACK\n"


Nun müsstest Du über "get myRelais state" den Zustand des AVR-NET-IO abfragen können...
:D
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 12 Januar 2016, 10:17:30
Hallo alexus,
danke für die Hinweise. Ich habe Ethersex drauf und somit sieht meine relais.classdef etwas anders aus. Ich habe verucht dort den Eintrag get state einzubauen, bekomme es aber nicht hin.
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 13 Januar 2016, 15:43:59
Hallo alexus,

so sieht meine relais.classdef 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 ddr 2 ff\n\000io get port 2 00 %RelaisPort\n"}
get state expect "OK\n"
get state postproc {s/([on\n|;]*)/success/; "$_" eq "success" ? "on ok" : "off ok";}


Die beiden set on / off funktionieren super.
Den untere Block ist mein Versuch den Status abzufragen. In der .cfg habe ich folgendes stehen:


define Feger ECMDDevice RELAIS 08
attr Feger room Heizung
attr Feger group 1_Relais
attr Feger sortby 4

get Feger state


In der Oberfläche steht dann:

Feger       state off ok         on         off

Also bekomme ich "state off ok" zurück und nicht "on ok"

Bei der direkten Abfrage mit

http://192.168.xxx.xxx/ecmd?pin get RELAIS4

bekomme ich

on

zurück, also sollte die "get Feger state" wenigstens den anderen falschen Status "state on ok" liefern und nicht off, hatte ich erwartet.  >:(
Bin halt noch nicht so Firm mit PERL.

Gruß
Heffa
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: alexus am 13 Januar 2016, 19:47:56
Hallo Heffa,

da ich die Original-Firmware nutze, kann ich es nicht ausprobieren.
Wenn aber Deine direkte Abfrage funktioniert
http://192.168.xxx.xxx/ecmd?pin get RELAIS4
was mich etwas wundert, denn RELAIS4 ist ja keine Adresse?!?
Probier doch dann einfach mal
get state cmd {"pin get RELAIS%RelaisPort\n"}
get state expect "OK\n"

Wäre fast zu einfach...  ::)
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: larrysteward am 13 Januar 2016, 20:05:31
Hallo Heffa,

ist der Befehl an deinen Net-IO wirklich
http://192.168.xxx.xxx/ecmd?pin get RELAIS4

Gemäß ECMD Befehlsreferenz gibt es für Port I/O nur die Befehle "io get" und "io set" wie es auch oben in deiner classdef benutzt wird. Wenn ich "pin get 3" (z.B.) an Ethersex schicke kriege ich ein parse error zurück während io get pin 3 das gewünscht Ergebnis in hexadezimaler Schreibweise ergibt.

Zum Abfragen der Ports schau die bitte nochmal das Wiki unter digitale Eingänge an. Habe ich erst diese Woche ergänzt und ist eventuell das was du zur Abfrage suchst.

Gruß,
Larry
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 14 Januar 2016, 08:59:56
Hallo,

da habe ich mich etwas falsch ausgedrückt. :(

Der Befehl:

http://192.168.xxx.xxx/ecmd?pin get RELAIS4


habe ich in meine Browser ausgeführt, nicht in FHEM. Dient für mich als Kontrolle direkt mit dem AVR-NET-IO zu kommunizieren.
Das die Abfrage in FHEM anders aussehen muss ist mir schon klar.  ;)

Ich werde mir das Wiki nochmals anschauen.

Danke
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: larrysteward am 14 Januar 2016, 21:02:05
Hallo Heffa,

ich hatte dich schon richtig verstanden, allerdings nicht an die Named Pin-Unterstützung von Ethersex gedacht, die ich bei mir auch gar nicht aktiviert habe.

Gruß,
Larry
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 15 Januar 2016, 16:02:37
Hallo Larry,

ich habe die io.classdef angelegt. Die muss ich doch bestimmt auf in der .cfg einbinden, oder?

Wie muss der Eintrag aussehen?

Sollte doch hier:

attr NETIO_01 classdefs ONEWIRE=.\opt\onewire.classdef:RELAIS=.\opt\relais.classdef:ADC=.\opt\netioadc.classdef

mit eingetragen werden, oder?

Wie verwende ich dann den "get" in der .cfg mit meien Definition Feger?


define Feger ECMDDevice RELAIS 08
attr Feger room Heizung
attr Feger group 1_Relais
attr Feger sortby 4


Gruß
Heffa
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: larrysteward am 16 Januar 2016, 11:27:07
Hallo Heffa,

ja, theoretisch sollte die Einbindung dann so aussehen:attr NETIO_01 classdefs ONEWIRE=.\opt\onewire.classdef:RELAIS=.\opt\relais.classdef:ADC=.\opt\netioadc.classdef:IO=.\opt\io.classdef

Aber eigentlich kannst du die Abfrage ja innerhalb deiner RELAIS.classdef erledigen.

# 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 $dez = hex($hex);\
my $retval = $dez & %RelaisPort;\      # hier wird der einzelne Pin abgefragt, zurück solltest du 0 oder die Portnummer bekommen
}


Probier das erstmal aus. Der Rückgabewert ist zwar nicht on oder off, aber wenn es bis hierher funktioniert, kannst du das Ergebnis ja noch weiter formatieren.

Gruß,
Larry
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tueftler1983 am 29 Januar 2016, 07:46:54
Hallo sorry wenn ich mich einklinke aber funktioniert das schalten der relais noch in fhem? Bei mir lief es ein jahr lang ohne Probleme jetzt kann ich seid ca 16 Januar kein Relais mehr schalten. Via telnet geht und wenn ich in der relais.classdef den Befehl :io set ddr 2 ff\n\000 bis dahin rausnehme klappt das schalten wieder bis zu einem Neustart von dem avr net io.
Dann muss :io set ddr 2 ff\n\000 erst wieder 1 mal ausgeführt werden kann mir jemand sagen woran es liegt?

Meine relais.classdef sieht derzeit so aus.
#Uebergabeparameter HEX Adresse Port
params RelaisPort
# erst alle Ports PC.. auf Ausgang setzen und dann per Hexcode schalten
set on cmd {"io 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 port 2 00 %RelaisPort\n"}
set off expect "OK\n"
set off postproc {s/([OK\n|;]*)/success/; "$_" eq "success" ? "ok" : "error";}
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tom_S am 29 Januar 2016, 12:07:51
@Tueftler1983

hast du das, was ich dir unter "Sonstiges" zu deinem Beitrag geschrieben habe schon gemacht?
Das ist zwar der richtige Forumsbereich, aber nicht dein Thema.

LG
Tom_S
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tueftler1983 am 29 Januar 2016, 12:41:51
Habe ich noch nicht gesehen... melde mich gleich
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tom_S am 29 Januar 2016, 13:32:19
@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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: larrysteward am 29 Januar 2016, 19:41:29
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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tom_S am 29 Januar 2016, 23:47:42
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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: larrysteward am 30 Januar 2016, 19:42:25
Das Leben kann  so einfach sein.

Vielen Dank!

Gruß,
Larry
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 31 Januar 2016, 13:08:26
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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 01 Februar 2016, 21:33:35
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

Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 06 Februar 2016, 14:10:18
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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Tom_S am 06 Februar 2016, 15:02:57
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
Titel: Antw:Pollin AVR-NET-IO und 8-Kanal Relaiskarte K8IO Relaisstatus abfragen
Beitrag von: Heffa am 08 Februar 2016, 09:14:13
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