Mit ECMD State abfragen

Begonnen von Heimbastler, 14 November 2016, 14:10:38

Vorheriges Thema - Nächstes Thema

Heimbastler

Hallo Boris,

vielen Dank dafür:
Zitat von: Dr. Boris Neubert am 31 März 2017, 20:21:45
Warum 1R10, wenn in deiner Definition 11 als Parameter angegeben ist?
Da hab ich geschlampt bei den Angaben / die devices gemixt.

Zitat von: Dr. Boris Neubert am 31 März 2017, 20:21:45
Kannst Du bitte noch den Match auf

0R%pin\r\n

setzen?
:-X hätt ich auch selbst drauf kommen / probieren können....
Mit dem \r\n läuft das merge sauber durch. Nach jedem reading vom Arduino stimmt nun die Rückgabe.
:D



Nur folgendes ist nun in den Readings zu sehen wenn vorher set on abgesetzt wurde: (siehe Anhänge)

<reading> on <regex> 1R10
<reading> state <regex> on 1R10


Habe jetzt nur noch Probleme das sauber anzuzeigen:
#1
Wenn ich nun das Icon sinnvoll anzeigen will scheint das mit einem Leerzeichen nicht zu funktionieren.

attr R10 off 0R10:rc_STOP:on on 1R10:rc_YELLOW:off


#2
Das funktioniert aber leider auch nicht:

attr R10 ^0R$:rc_STOP:on ^1R$:rc_YELLOW:off


#3
oder muss ich das über eventMap steuern?

attr R10 { dev=>{"^1R"=>"on"}, dev=>{"^0R"=>"off"} }


Entschuldige bitte wenn Dir das in der Seele wehtun sollte...

VG
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Ich schneide bei meiner Klassendefinition für meinen Arduino einfach alles weg:

set on postproc { s/.*\r\n//; $_ }
set off postproc { s/.*\r\n//; $_ }


Geht vermutlich auch einfacher. Ungetestet:

set on postproc { "" }
set off postproc { "" }

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

Heimbastler

Guten Abend,

jetzt habe ich den postproc probiert...leider ohne Erfolg

Internals:
   DEF        serial /dev/ttyACM2@9600
   DeviceName /dev/ttyACM2@9600
   FD         16
   NAME       Arduino
   NR         337
   PARTIAL
   Protocol   serial
   STATE      opened
   TYPE       ECMD
   Readings:
     2017-04-03 19:57:58   state           opened
   Fhem:
     Classdefs:
       Rel:
         filename   /opt/fhem/ECMD.classdef
         params     pin
         Gets:
         Readings:
           Off:
             match      0R%pin\r\n
           On:
             match      1R%pin\r\n
         Sets:
           Off:
             cmd        {"0R%pin\r\n"}
             postproc   { s/.*\r\n//; $_ }
           On:
             cmd        {"1R%pin\r\n"}
             postproc   { s/.*\r\n//; $_ }
     Partial:
       msg
       ts         1491242568.33951
Attributes:
   classdefs  rel=/opt/fhem/ECMD.classdef
   logTraffic 5
   partial    2
   verbose    5


Im Anhang noch deteils zum ECMDdevice

Und ein log-Auszug

2017.04.03 20:09:06 5: Arduino: sending command 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 20:09:06 5: Arduino: write 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 20:09:06 5: SW: 305231300d0a
2017.04.03 20:09:06 5: Arduino: read 0R1 (\060\122\061)
2017.04.03 20:09:06 5: Arduino: Spontaneously received 0R1 (\060\122\061)
2017.04.03 20:09:06 5: Arduino dispatch 0R1
2017.04.03 20:09:06 5: Arduino: trying to match message 0R1 (\060\122\061)
2017.04.03 20:09:06 5: Arduino: partial message 0R1 (\060\122\061) kept
2017.04.03 20:09:06 5: Arduino: read 0\r\n (\060\015\012)
2017.04.03 20:09:06 5: Arduino: Spontaneously received 0\r\n (\060\015\012)
2017.04.03 20:09:06 5: Arduino dispatch 0

2017.04.03 20:09:06 5: Arduino: merging partial message 0R1 (\060\122\061) and 0\r\n (\060\015\012)
2017.04.03 20:09:06 5: Arduino: trying to match message 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 20:09:06 5: Arduino: 0R10\r\n (\060\122\061\060\015\012) matches regex 0R10\r\n for reading off of device R10 with class rel


Ehrlich gesagt verstehe ich den postprocess nicht.
Wie soll der den state auf nur on/off bringen?

VG
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Meine classdef sieht so aus:

# these are the numbers of the output pin from 0 to 2
# relais has inverted logic
params n
set on cmd { "s%n0\r" }
set on expect ".*\r\n"
set on postproc { s/.*\r\n//; $_ }
set off cmd { "s%n1\r" }
set off expect ".*\r\n"
set off postproc { s/.*\r\n//; $_ }
get version cmd { "v\r" }
get version expect ".*\r\n"
#
# eof
#


Bis auf eine andere Kommandosyntax habe ich exakt den selben Anwendungsfall.

Wie sieht denn Deine classdef jetzt aus?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Heimbastler

Hi Boris,

das habe ich in meiner classdef stehen:

#===========Arduino.classdef

# Uebergabeparameter
params pin

# Umsetzung in ECMD Befehle
set on cmd {"1R%pin\r\n"}
set off cmd {"0R%pin\r\n"}

set on postproc { s/.*\r\n//; $_ }
set off postproc { s/.*\r\n//; $_ }

reading on match "1R%pin\r\n"
reading off match "0R%pin\r\n"


ich werde Deine einfach mal probieren. Danke für die Info.

VG
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Heimbastler

jetzt habe ich das reading aus der classdef entfernt und Deine expect hinzugefügt:

#===========Arduino.classdef

# Uebergabeparameter
params pin

# Umsetzung in ECMD Befehle
set on cmd {"1R%pin\r\n"}
set on expect ".*\r\n
set on postproc { s/.*\r\n//; $_ }

set off cmd {"0R%pin\r\n"}
set off expect ".*\r\n
set off postproc { s/.*\r\n//; $_ }


aber ich denke mal ich muss das reading drinlassen damit überhaupt etwas vom Arduino gelesen werden kann?
jetzt habe ich auch keinerlei reading wenn der Arduino etwas sendet. Vorher hatte ich hier das reading on und das das reading off....

:-\
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Du brauchst doch nur den state und keine Readings.

In Deinem state sollte entweder on oder off stehen.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Heimbastler

Hi Boris,

ich kriege es nicht hin. Reading ist nun nicht mehr in der classdef und trotzdem kriege ich kein on bzw. off für den state:

2017.04.03 22:50:38 5: Arduino: sending command 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 22:50:38 5: Arduino: write 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 22:50:38 5: SW: 305231300d0a
2017.04.03 22:50:38 5: Arduino: read 0R1 (\060\122\061)
2017.04.03 22:50:38 5: Arduino: Spontaneously received 0R1 (\060\122\061)
2017.04.03 22:50:38 5: Arduino dispatch 0R1
2017.04.03 22:50:38 5: Arduino: partial message 0R10\r\n (\060\122\061\060\015\012) expired.
2017.04.03 22:50:38 5: Arduino: trying to match message 0R1 (\060\122\061)
2017.04.03 22:50:38 5: Arduino: partial message 0R1 (\060\122\061) kept
2017.04.03 22:50:38 5: Arduino: read 0\r\n (\060\015\012)
2017.04.03 22:50:38 5: Arduino: Spontaneously received 0\r\n (\060\015\012)
2017.04.03 22:50:38 5: Arduino dispatch 0

2017.04.03 22:50:38 5: Arduino: merging partial message 0R1 (\060\122\061) and 0\r\n (\060\015\012)
2017.04.03 22:50:38 5: Arduino: trying to match message 0R10\r\n (\060\122\061\060\015\012)
2017.04.03 22:50:38 5: Arduino: partial message 0R10\r\n (\060\122\061\060\015\012) kept


classdef:

# Uebergabeparameter
params pin

# Umsetzung in ECMD Befehle


set on cmd {"1R%pin\r\n"}
set on expect ".*\r\n
set on postproc { s/.*\r\n//; $_ }

set off cmd {"0R%pin\r\n"}
set off expect ".*\r\n
set off postproc { s/.*\r\n//; $_ }


Das ist leider immer noch nicht so das ein "1R%pin\r\n" bzw. "0R%pin\r\n" im state "on" bzw. "off" hinterlegt.

VG
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Nimm mal bitte die regulären Ausdrücke von den match-Kommandos aus Deiner alten Classdef für die regulären Ausdrücke beim expect.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Heimbastler

Hi Boris,

habe nun den expect upgedated und alles noch mal gecheckt. Icmmer noch kein Erfolg:

2017.04.04 20:44:20 5: Arduino: sending command 0R10\r\n (\060\122\061\060\015\012)
2017.04.04 20:44:20 5: Arduino: write 0R10\r\n (\060\122\061\060\015\012), expect 0R10\r\n
2017.04.04 20:44:20 5: SW: 305231300d0a
2017.04.04 20:44:20 5: Arduino: read 0R10\r\n (\060\122\061\060\015\012)
2017.04.04 20:44:20 5: Arduino: received answer 0R10\r\n (\060\122\061\060\015\012)
2017.04.04 20:46:10 5: Arduino: read 1R10\r\n (\061\122\061\060\015\012)
2017.04.04 20:46:10 5: Arduino: Spontaneously received 1R10\r\n (\061\122\061\060\015\012)
2017.04.04 20:46:10 5: Arduino dispatch 1R10

2017.04.04 20:46:10 5: Arduino: partial message 1R10\r\n (\061\122\061\060\015\012) expired.
2017.04.04 20:46:10 5: Arduino: trying to match message 1R10\r\n (\061\122\061\060\015\012)
2017.04.04 20:46:10 5: Arduino: partial message 1R10\r\n (\061\122\061\060\015\012) kept


Wenn ich den externen Schalter drücke wird der Schalvorgang erkannt aber nicht im state hinterlegt. Ab 20:46:10 im Log


im classdef steht jetzt

# Uebergabeparameter
params pin

# Umsetzung in ECMD Befehle


set on cmd {"1R%pin\r\n"}
set on expect "1R%pin\r\n"
set on postproc { s/.*\r\n//; $_ }

set off cmd {"0R%pin\r\n"}
set off expect "0R%pin\r\n"
set off postproc { s/.*\r\n//; $_ }




ist der postproc jetzt noch krumm?

VG + Danke
Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Wo kommt denn das spontan empfangene 1R10\r\n um 20:46:10 her? Was löst es aus?
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Heimbastler

Na das müsste der Arduino senden?
In dem Fall wurde der Ursprüngliche Schaltbefehl nicht von fhem aus gesendet, sondern direkt vom Arduino.

Das war/ist aber immer so...egal wer Auslöser ist weil der Arduino nach dem schalten ja immer sendet...
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Ach so.

Dann setze bitte an Deinem ECMDDevice das Attribut noState auf 1 und nimm diese classdef:

# Uebergabeparameter
params pin

# Umsetzung in ECMD Befehle
set on cmd {"1R%pin\r\n"}
set on expect "1R%pin\r\n"

set off cmd {"0R%pin\r\n"}
set off expect "0R%pin\r\n"

reading state match "[01]R%pin\r\n"
reading state postproc { /([01])R%pin\r\n/; $1 ? "on" : "off" }


Das habe ich getestet.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Heimbastler

geht leider immer noch nicht.

2017.04.06 19:41:12 5: Arduino: sending command 1R10\r\n (\061\122\061\060\015\012)
2017.04.06 19:41:12 5: Arduino: write 1R10\r\n (\061\122\061\060\015\012), expect 1R10\r\n
2017.04.06 19:41:12 5: SW: 315231300d0a
2017.04.06 19:41:12 5: Arduino: read 1R10\r\n (\061\122\061\060\015\012)
2017.04.06 19:41:12 5: Arduino: received answer 1R10\r\n (\061\122\061\060\015\012)
2017.04.06 19:41:24 5: Arduino: sending command 0R10\r\n (\060\122\061\060\015\012)
2017.04.06 19:41:24 5: Arduino: write 0R10\r\n (\060\122\061\060\015\012), expect 0R10\r\n
2017.04.06 19:41:24 5: SW: 305231300d0a
2017.04.06 19:41:25 5: Arduino: read 0R10\r\n (\060\122\061\060\015\012)
2017.04.06 19:41:25 5: Arduino: received answer 0R10\r\n (\060\122\061\060\015\012)


ist split und partial an der Stelle immer nocg sinnvoll?
Im Anhang dazu alle Einstellungen

VG...Alex
RasPi 3 mit FHEM V5.7 3x18B20 über 1Wire,  CUL868, 4xIT-Schalter, 6xELRO-Schalter, 6xReed-Kontakte, 2xMAX-Fensterkontakt, 3xMAX-Thermostate, 2xMAX-Wandthermostate
PID20, RPI_GPIO, HCW, Alarm, Pushover, GPIO4, MAX, ECMD,IT, AT,

Dr. Boris Neubert

Du hast Readings on und off. Diese sind aber nicht in der classdef. Das deutet darauf hin, dass Du nur unvollständig neu geladen hast. Versuche es bitte erneut.
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!