AMAD goes Tasker

Begonnen von Schlimbo, 16 Dezember 2017, 22:08:42

Vorheriges Thema - Nächstes Thema

CoolTux

Dann werde ich heute im Laufe des Tages da eine Prüfung einbauen und dann schauen wir mal.
Wenn du magst und kannst
$hash->{DEF} ne $hash->{OLDDEF}
müsste glaube die korrekte Prüfung sein.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

#46
Zitat von: CoolTux am 28 Dezember 2017, 07:42:43
Wenn du magst und kannst
$hash->{DEF} ne $hash->{OLDDEF}
müsste glaube die korrekte Prüfung sein.
Da warte ich mal lieber deine Version ab ;)

Zitat von: Schlimbo am 07 Dezember 2017, 22:54:13
Beim testen ist mit gerade noch aufgefallen, wenn ein Gerät an die CommBridge Readings schickt, die AMAD_ID aber nicht existiert, weil das AMAD_Device in FHEM gelöscht wurde, läuft mein Logfile mit unzähligen Meldungen voll.
Hab mir das gerade noch mal etwas genauer angesehen.
Wenn die CommBridge Daten empfängt wird sub "AMADCommBridge_ResponseProcessing($$)" aufgerufen.
Hier ist erst eine Prüfung ob die JSON Daten okay sind (Zeile 752).
Dann wird geprüft ob eine amad_id im JSON String vorhanden ist (Zeile 788).
und dann wird "fhemcmd" ausgewertet (Zeile 805).

Diese Prüfungen bestehen auch Empfangene Daten mit ungültiger ID.
Die erste Fehlermeldung ist dann in Zeile 809 da die Variable $fhemDevice nicht gesetzt ist, weil in Zeile 782 über die ID kein Device gefunden wurde.
PERL WARNING: Use of uninitialized value $fhemDevice in concatenation (.) or string at ./FHEM/73_AMADCommBridge.pm line 809, <GEN14> line 13.
AMADCommBridge (myAmadBridge) - AMADCommBridge: processing receive reading values - Device:  Data: HASH(0x4d18160)


Alle weiteren Fehlermeldungen kommen dann aus AMADDevice sub "AMADDevice_WriteReadings($$)",
da hier dann versucht wird die Readings zu setzten, der hash aber auf ein nicht vorhandenes Device zeigt
PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at ./FHEM/74_AMADDevice.pm line 404, <GEN14> line 13.

Eigentlich sollte das WriteReadings durch die Prüfung in sub "AMADDevice_Parse($$)" (Zeile 773)
if( my $hash        = $modules{AMADDevice}{defptr}{$amad_id} )
ja gar nicht aufgerufen werden, denke dass hier in der Prüfung noch ein Fehler ist.

Im Anhang das komplette Log

CoolTux

Habe bezüglich DEF den Fehler gefunden und gefixt. Das andere kann ich mir erst die Tage anschauen.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo


CoolTux

Zitat von: Schlimbo am 28 Dezember 2017, 14:10:55
Da warte ich mal lieber deine Version ab ;)
Hab mir das gerade noch mal etwas genauer angesehen.
Wenn die CommBridge Daten empfängt wird sub "AMADCommBridge_ResponseProcessing($$)" aufgerufen.
Hier ist erst eine Prüfung ob die JSON Daten okay sind (Zeile 752).
Dann wird geprüft ob eine amad_id im JSON String vorhanden ist (Zeile 788).
und dann wird "fhemcmd" ausgewertet (Zeile 805).

Diese Prüfungen bestehen auch Empfangene Daten mit ungültiger ID.
Die erste Fehlermeldung ist dann in Zeile 809 da die Variable $fhemDevice nicht gesetzt ist, weil in Zeile 782 über die ID kein Device gefunden wurde.
PERL WARNING: Use of uninitialized value $fhemDevice in concatenation (.) or string at ./FHEM/73_AMADCommBridge.pm line 809, <GEN14> line 13.
AMADCommBridge (myAmadBridge) - AMADCommBridge: processing receive reading values - Device:  Data: HASH(0x4d18160)


Alle weiteren Fehlermeldungen kommen dann aus AMADDevice sub "AMADDevice_WriteReadings($$)",
da hier dann versucht wird die Readings zu setzten, der hash aber auf ein nicht vorhandenes Device zeigt
PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at ./FHEM/74_AMADDevice.pm line 404, <GEN14> line 13.

Eigentlich sollte das WriteReadings durch die Prüfung in sub "AMADDevice_Parse($$)" (Zeile 773)
if( my $hash        = $modules{AMADDevice}{defptr}{$amad_id} )
ja gar nicht aufgerufen werden, denke dass hier in der Prüfung noch ein Fehler ist.

Im Anhang das komplette Log

Habe einen kleinen Check im Bridge Modul eingebaut.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

Danke, jetzt ist mein Log sauber :)

Für was ist eigentlich Zeile 789?
readingsSingleUpdate( $bhash, "transmitterERROR", $hash->{NAME}." has no device name sends", 1 ) if( AttrVal( $bname, "expertMode", 0 ) eq "1" );
Konnte das Attribut "expertMode" nirgends finden, ist das noch ein Überbleibsel einer alten Version?

CoolTux

Jup ist noch ein Überbleibsel. Habe ich gerade geändert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Kannst Du auf Taskerseite Headerinformationen auswerten? Sprich wenn ich die amad_id im Header mit sende kannst Du sie dann auswerten?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

#53
Nein das geht leider nicht.
Bekomme von Autoremote und TNES nur den Commands String. An den Header kommt man da nicht ran.

CoolTux

Zitat von: Schlimbo am 03 Januar 2018, 11:53:15
Nein das geht leider nicht.
Bekomme von Autoremote und TNES nur den Commands String. An den Header kommt man da nicht ran.

Dann mach mal bitte einen Vorschlag was bei Dir gehen würde  ;D
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

Direkt in den Command string:
"/fhem-amad/" . $amad_id . "/setCommands/...


CoolTux

Wird nicht gehen. Das ist für Automagic ein fester Wert. Ich kann nur hinten noch Optionen mit & anbinden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

Kannst du im Automagic Trigger "HTTP Request" nicht auch Platzhalter verwenden? z.B.
/fhem-amad/*/setCommands/*

Und dann in der Expression "Expression: trigger == "HTTP Request: /fhem-amad/setCommands/*"
zwischen "fhem-amad" und "setCommands" noch die Variable "global_amadid" einsetzen?

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Schlimbo

Hallo Leon,
hab mir das bei Automagic mal angesehen:
Möglich wäre es zwar die ID in den Pfad mit zu übernehmen, aber dadurch müssten im Flow alle Stellen angepasst werden, in denen "request_path" verwendet wird.
Würde dann so aus schauen:
HTTP Request: /fhem-amad/*/setCommands/*, Port 8090
Expression: result = matches({request_path}, "/fhem-amad/" + {global_amadid} + "/setCommands/setBrightness*")
Expression: request_path == "/fhem-amad/" + {global_amadid} + "/setCommands/setBrightness"
...

Einfacher wäre es somit schon die ID einfach als Parameter anzuhängen, das könnte ich in Tasker auch auswerten.

Im Informationen Flow muss in beiden Fallen noch der Teil entfernt werden, wo die Globalen Variablen gesetzt werden:
if (header_amadid != null or header_amadid != {global_amadid}) {
   global_amadid = {header_amadid} }