Ecmd,Avr Webmodul Relais Probleme[gelöst]

Begonnen von ghostwriter, 30 Oktober 2016, 12:54:09

Vorheriges Thema - Nächstes Thema

ghostwriter

Hallo Fhem Gemeinde

Ich bin neu hier :)

Lese zwar schon eine ganze Weile mit ,aber jetzt werde ich erst aktiv.

Zu meinem Problem ich habe hier ein webmodul von ulrich radig liegen, da hab ich mittlerweile ethersex drauf, was auch läuft.

Zur Integration in Fhem kann man ja sehr viel von den howtos des avr netio ableiten.
Einiges davon ist mir bis jetzt auch schon gelungen (onewire temps und dht22) - funktionieren.

Ich scheitere leider an den vier relais und an den vier digitalen eingängen.

Der Unterschied zwischen avr netio und webmodul ist, dass der netio acht relais auf port pc0-pc7 hat und beim webmodul sind es nur vier relais, k1+2 auf pc2+pc3, relais k3+4 auf pd6+pd7 liegen.

Ich komme nicht so richtig klar wie ich die relais.classdef bauen soll.
Dazu muß ich noch schreiben das ich in ethersex die funktion named pins aktiviert habe und die vier Relais sind schon als Output deklariert.
Mit einer Telnet Verbindung zum Webmodul kann ich mit pin set k1 on auch schalten
k1 =PC2,k2 = PC3,k3=PD6,k4=PD7

Bis jetzt sieht es so aus:

define WEB_MODUL ECMD telnet 192.168.1.90:2701
attr WEB_MODUL classdefs ONEWIRE=/opt/fhem/FHEM/onewire.classdef:DHT22=/opt/fhem/FHEM/dht22.classdef:RELAISTEST=/opt/fhem/FHEM/relaistest.classdef
attr WEB_MODUL logTraffic 5
attr WEB_MODUL room Keller
attr WEB_MODUL verbose 5



define k1 ECMDDevice RELAISTEST 04
attr k1 IODev WEB_MODUL
attr k1 logTraffic 5
attr k1 verbose 5
attr k1 eventMap on:on off:off
attr k1 room Keller


relaistest.classdef:

# Uebergabeparameter
params name

# Umsetzung in ECMD Befehle
set on cmd {"pin set %name on\n"}
set on expect "(on|off)\n"
set on postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}

set off cmd {"pin set %name off\n"}
set off expect "(on|off)\n"
set off postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


get getdata cmd {"pin get %name\n"}
get getdata expect "(on|off)\n"
get getdata postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


log ausszug:
2016-10-30 12:03:42 ECMDDevice k1 status: parse error
2016-10-30 12:03:42 ECMDDevice k1 on: status: parse error
2016-10-30 12:03:42 ECMDDevice k1 on status: parse error
2016-10-30 12:03:53 ECMDDevice k1 status: parse error
2016-10-30 12:03:53 ECMDDevice k1 off: status: parse error
2016-10-30 12:03:53 ECMDDevice k1 off status: parse error
2016-10-30 12:04:01 ECMDDevice k1 status: parse error
2016-10-30 12:04:01 ECMDDevice k1 getdata: status: parse error
2016-10-30 12:04:01 ECMDDevice k1 getdata status: parse error


Ich hoffe ihr habt ne Idee für mich
Ich bedanke mich schon im voraus für eure hilfe.
Gruß Tom

pejonp

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

ghostwriter

Moin Pejonp

Ich weiß grad nicht so richtig was Du mir mit dem link sagen willst ?
Was hat das mit Relais schalten zu tun?
Steh grad auf dem schlauch  :-\

Gruss

pejonp

Hi,

es hat mit ECMD zu tum. Wenn keine Werte angezeigt werdenkönnte es hierdran liegen.

attr D0Z split \r\n      <--- das ist wichtig sonst werden keine Daten selektiert

pejonp
LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

ghostwriter

Hallo Pejonp

Habe ich um gesetzt und noch ein wenig umgestellt,hat aber nichts gebracht.

define WEB_MODUL ECMD telnet 192.168.1.90:2701
attr WEB_MODUL classdefs ONEWIRE=/opt/fhem/FHEM/onewire.classdef:DHT22=/opt/fhem/FHEM/dht22.classdef:RELAISTEST=/opt/fhem/FHEM/relaistest.classdef
attr WEB_MODUL logTraffic 5
attr WEB_MODUL room Keller
attr WEB_MODUL split \r\n
attr WEB_MODUL verbose 5


define K1 ECMDDevice RELAISTEST 04
attr K1 IODev WEB_MODUL
attr K1 verbose 5
attr K1 eventMap on:on off:off
attr K1 room Keller

define FileLog_K1 FileLog /opt/fhemlogs/K1-%Y%m%d.log K1
attr FileLog_K1 logtype text
attr FileLog_K1 room Keller
attr FileLog_K1 verbose 2


Und als log weiterhin
2016-10-31 17:44:54 ECMDDevice K1 status: parse error
2016-10-31 17:44:54 ECMDDevice K1 on: status: parse error
2016-10-31 17:44:54 ECMDDevice K1 on status: parse error
2016-10-31 17:45:01 ECMDDevice K1 status: parse error
2016-10-31 17:45:01 ECMDDevice K1 on: status: parse error
2016-10-31 17:45:01 ECMDDevice K1 on status: parse error
2016-10-31 17:45:03 ECMDDevice K1 status: parse error
2016-10-31 17:45:03 ECMDDevice K1 off: status: parse error
2016-10-31 17:45:03 ECMDDevice K1 off status: parse error
2016-10-31 17:45:04 ECMDDevice K1 status: parse error
2016-10-31 17:45:04 ECMDDevice K1 on: status: parse error
2016-10-31 17:45:04 ECMDDevice K1 on status: parse error
2016-10-31 17:45:06 ECMDDevice K1 status: parse error
2016-10-31 17:45:07 ECMDDevice K1 off: status: parse error
2016-10-31 17:45:07 ECMDDevice K1 off status: parse error
2016-10-31 17:45:08 ECMDDevice K1 status: parse error
2016-10-31 17:45:08 ECMDDevice K1 on: status: parse error
2016-10-31 17:45:08 ECMDDevice K1 on status: parse error


Wie wärs denn wenn ich mir zwei relais.classdef aufbaue einen für port2 und einen für port3 müßte das nicht gehen?
Und den Aufbau genau wie beim avr netio.

Gruss
Tom

pejonp

Hi,

schau mal hier (http://www.ethersex.de/index.php/Nutzung_in_FHEM_(Deutsch)) "digitale Eingänge - proaktiv " vielleicht hast du dort auch schon nachgesehen.

So wie es aussieht, hast du aber noch einen Fehler in der Auswertung: ECMDDevice K1 on: status: parse error

Vielleicht mal eine Classe für jedes Relais basteln ohne Ersetzungen (regex), Werte fest eintragen und testen.

pejonp

LaCrossGW 868MHz:WT470+TFA+TX37-IT+EMT7110+W136+WH25A HP1003+WH2621
SignalD(CC1101):Bresser+WS-0101(868MHz WH1080)+Velux KLF200+MAX!+HM-MOD-UART:Smoke HM-SEC-SD+VITOSOLIC 200 RESOL VBUS-LAN+SolarEdge SE5K(Modbus)+Sonnen!eco8(10kWh)+TD3511+DRT710M(Modbus)+ZigBee+Z-Wave+MQTT+vitoconnect

ghostwriter

Moin moin

So Relais schalten hab ich jetzt schon mal hin bekommen der Fehler war im define.

Hab ich jetzt so und funktioniert:


Classdef ist geblieben.

Nun möchte ich halt noch die vier digital eingänge einlesen.
Hab schon mal versucht ne classdef zu erstellen mit folgenden Inhalt:
get getdata cmd {"pin get %name\n"}
get getdata expect "(on|off)\n"
get getdata postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


Ich denke das wird so nicht reichen oder?

Und als define dann so:

define OK1 ECMDDevice IN ok1
attr OK1 IODev WEB_MODUL
#attr OK1 eventMap on:on off:off
attr OK1 room Keller

Das mag fhem gar nicht,es kommt

ERROR:
OK1 error: wrong number of Parameters

Was mache ich falsch????

Gruss

ghostwriter

Hallo Fhem Gemeinde

Ich komme einfach mit den Digitaleingängen nicht weiter.
Hab die classdef nochmal geändert, aber immer wenn ich die io define anlegen will sagt er ERROR:OK1 error: wrong number of Parameters

Hier das ECMD:

define WEB_MODUL ECMD telnet 192.168.1.90:2701
attr WEB_MODUL classdefs ONEWIRE=/opt/fhem/FHEM/onewire.classdef:DHT22=/opt/fhem/FHEM/dht22.classdef:RELAIS=/opt/fhem/FHEM/relais.classdef:IO=/opt/fhem/FHEM/io.classdef
attr WEB_MODUL logTraffic 0
attr WEB_MODUL room Keller
attr WEB_MODUL split \r\n
attr WEB_MODUL verbose 5


die neue io.classdef:

# Umsetzung in ECMD Befehle
get read cmd {"pin get %name\n"}
#get read expect ".*"
get read expect "(on|off)\n"
get read postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


Und das ECMDDevice:

define OK1 ECMDDevice IO ok1
attr OK1 IODev WEB_MODUL


Und wenn ich dann speichere ERROR:OK1 error: wrong number of Parameters

Was mache ich bloß falsch ????

Bei direkter Telnet Verbindung mit dem Webmodul Bekomme ich bei pin get ok1 - ein on zurück.

Brauche Hilfe vielen Dank schon mal im voraus.

Gruss

Dr. Boris Neubert

Zitat von: ghostwriter am 02 November 2016, 18:36:41
define OK1 ECMDDevice IO ok1
attr OK1 IODev WEB_MODUL


Und wenn ich dann speichere ERROR:OK1 error: wrong number of Parameters

Was heißt speichere?

Starte bitte mal mit einer FHEM-Konfiguration ohne irgendwelche Geräte. Verbinde Dich per telnet mit FHEM. Stelle den globale Loglevel auf 5. Verfolge parallel die Ausgabe in die Logdatei (bist Du unter Linux? Dann kannst Du Dir das Log mit tail -f /pfad/zu/fhem.log in einem zweiten Terminal ansehen). Stelle das Trafficlog an, wie im angehefteten Beitrag in diesem Board empfohlen (Attribut am ECMD).

Arbeite dann erst die Definition des ECMD-Geräts Zeile für Zeile ab. Dann des EMCDDevice. Dann sende einen Befehl an das Device. Verfolge dabei das Log. Was fällt Dir ungewöhnliches auf? Poste das gesamte fhem.log zu diesen Aktivitäten hier (als Anhang).

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

ghostwriter

Hallo Boris,

Speichern bedeutet für mich wenn ich auf save fhem.cfg gehe.

Ich hab es jetzt gelöst,der Fehler war eine fehlende Zeile in der io.classdef.

Für alle die es Interressiert gebe ich meine funktionierten classdef Dateien.
Betrifft nur die Leute mit Ethersex Device mit named pin Konfigurationen.

Relais.classdef:

# Uebergabeparameter pin names Unterstützung in ethersex
params name

# Umsetzung in ECMD Befehle
set on cmd {"pin set %name on\n"}
set on expect "(on|off)\n"
set on postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}

set off cmd {"pin set %name off\n"}
set off expect "(on|off)\n"
set off postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


get getdata cmd {"pin get %name\n"}
get getdata expect "(on|off)\n"
get getdata postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


Und die digital eingänge io.classdef:

# keine Uebergabeparameter - pin names Unterstützung in ethersex
# Umsetzung in ECMD Befehle
params name
get read cmd {"pin get %name\n"}
get read expect ".*"
#get read expect "(auf|zu)\n"
get read postproc {\
s/(.*)\n/$1/;\
my $hash  = $defs{%NAME};\
my $status = $1;\
\
readingsSingleUpdate($hash, "status", $status, 1);\
\
}


Ich bin froh das ich die erste Hürde genommen habe.

Für alle die mich unterstützt haben vielen Dank.

Gruss Tom


Dr. Boris Neubert

Hallo Tom,

freut mich, dass es für Dich jetzt funktioniert.

Zitat von: ghostwriter am 04 November 2016, 18:41:35
Speichern bedeutet für mich wenn ich auf save fhem.cfg gehe.

Für die Nachwelt: derart komplexe Anwendungsfälle lassen sich besser über die FHEM-Konsole nachvollziehen, entlang der Verfahrensweise, die ich in meinem vorigen Thread beschrieben habe.

Zitat
params name

David Kahnemann, WYSIATI (what you see is all there is) - der Mensch beschäftigt sich mit dem, was er sieht, und es fällt dem Menschen unglaublich schwer, an die Dinge zu denken, die er nicht sieht. Wie eine fehlende params-Deklaration.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!