Reading -get -set

Begonnen von th1984, 17 Dezember 2016, 10:37:55

Vorheriges Thema - Nächstes Thema

th1984

Hallo,

ich habe eine Frage zu dem KNX Modul: Ich habe meine Steckdosen über einen Aktor geschaltet. Von diesem möchte ich mir 2 Werte holen und eben die Steckdose schalten. Wenn ich nun alle drei Adressen einzeln in FHEM definiere, klappt alles, aber, man möchte es ja schön und richtig machen, deswegen habe ich dieses jetzt entsprechend geändert:

7/2/6:dpt1:status 6/4/7:dpt9.021 6/4/2:dpt13.010

Soweit so gut. die Werte mA und auch kw/h kann ich mir problemlos anzeigen lassen, da diese ja auch immer in dem get-reading gespeichert werden. Ich habe nur ein Problem mit dem Status. Hier steht das aktuelle Reading mal im status-get und mal im status-set reading, je nachdem ob der Schaltbefehl von KNX kam oder aber aus dem Webinterface von FHEM. Da nun aber auch die anderen readings im state landen, kann ich von dort auch den Status nicht mehr abfragen. Daher meine Frage, gibt es eine Möglichkeit das reading ohne -get & -set zu speichern. Oder ist es eigentlich nicht vorgesehen, dass ich so ein Device so zusammen bastle?

Danke und vlg
Thomas

EIB-Fan

Hallo th1984,

der Status des KNX-Aktors wird durch status-get aktualisiert.

Um diesen in Fhem in state anzuzeigen, musst du statecmd verwenden.

attr steckdose stateCmd {sprintf("%s", ReadingsVal($name,"status-get",""))}

Gruß Jens

th1984

Hallo Jens,

danke für deine Antwort. Das ist ja genau mein Problem. Das funktioniert ja nicht. Auf state laufen regelmäßig andere Werte drüber, zum Beispiel der momentane Verbrauch in mA (aktualisiert sich immer wenn er sich ändert) oder aber der Gesamtverbrauch einmal in der Stunde. Daher bildet state nie den tatsächlichen Status der Steckdose ab (also ob ein oder aus). Einfach gesagt müsste ich nur beide readings (status-get, status-set) in ein reading status schreiben. Aber ist der Gedanke nicht zu kompliziert? Und wenn nein, wie schreibe ich ein Reading in ein anderes und auch nur dann wenn dieses einen neuen Wert liefert?

Grüße
Thomas

EIB-Fan

Hallo thomas,

hast du statecmd probiert?

Gruß Jens

th1984

#4
Hallo Jens,

klar hab ichs probiert. Mit deiner Variante und auch mit nachstehender. Erfolg hatte ich gar keinen, sprich state wurde überhaupt nicht geändert. Wenngleich ich glaube, selbst wenn sich state kurz ändert, was passiert wenn ein neues Reading kommt? Wird dann state auch wieder mit dem ein aus status überschrieben?
{$state = sprintf("%s", "ReadingsVal($name,"status-set",""))}
das ist ja das Original aus der Commandref aber auch mit deinem Vorschlag. State lässt sich jedoch damit nicht verändern. Warum auch immer....

Dafür gibt es eine Fehlermeldung im Log:

PERL WARNING: String found where operator expected at (eval 187) line 1, near "set",""
PERL WARNING: String found where operator expected at (eval 187) line 1, at end of line
PERL WARNING: Bareword found where operator expected at (eval 191) line 1, near


Grüße
Thomas

EIB-Fan

#5
Hallo Thomas,

habe bei mir immer alle KNX-Gruppenadressen mit einem ReadingName (status, strom, verbrauch ...) angegeben. Probier das mal ...

Vielleicht hilft auch mal alle Readings des Device zu löschen. Diese werden dann neu geschrieben.

In der Kommadozeile von Fhem eingeben:

deletereading steckdose .*

Kannst du bitte auch mal das komplette Device posten.

Gruß Jens

th1984

Hallo Jens,

danke schonmal für deine Geduld. Mein Device ist eigentlich ganz einfach, keine Besonderheiten. Aber das statecmd mag er gar nicht. Da kommt dann keine Aktualisierung zu state mehr durch. Deswegen vermutlich auch der Fehler im Log. Da bin ich noch am Suchen was den auslöst.

define og_bu_steckdose_neben_fenster_links KNX 7/2/6:dpt1:status 6/4/7:dpt9.021:ma 6/4/2:dpt13.010:kwh
attr og_bu_steckdose_neben_fenster_links IODev KNX
attr og_bu_steckdose_neben_fenster_links alias Schreibtisch Thomas
attr og_bu_steckdose_neben_fenster_links group Steckdose
attr og_bu_steckdose_neben_fenster_links room OG_Büro


Hast du deine Steckdosen eventuell ähnlich aufgebaut? Wie hat das bei dir mit den unterschiedlichen Readings funktioniert... ich steh da scheinbar immer noch auf dem Schlauch. Gerade auch wenn ich dann eine Groupreadings machen will, muss ich ja sicherstellen das ich nur ein Reading habe. Wenn aber jedes mal -get -set dahinter steht, hab ich ja immer zwei die ich dann immer irgendwie zusammenfassen muss da ja das Ergebnis sonst nicht stimmen kann.

Readings hab ich übrigens mal gelöscht, ist aber vom Ergebnis her alles das gleiche. Auch das mit der Fehlermeldung wenn ich den statecmd wieder rein klopfe. Über weitere Ideen bin ich dankbar ;-)

vlg
Thomas

Andi291

Abend!

Ich hab noch nicht so ganz verstanden, was Dein Problem ist...In state steht immer die letzte Transaktion im aktuellen Gerät. Kannst Du (wie zuvor beschrieben) per StateCmd anpacken.

Ich persönlich modifiziere lieber per stateRegex und packe mir die nötigen Informationen in den INHALT von state. Beispiel:

define nas KNX 11/0/1:dpt1.001:status 11/0/0:dpt1.001:steuern 11/0/2:dpt1.001:reboot
attr nas stateRegex /steuern-[sg]et:/steuern-/ /status-[sg]et:/status-/ /reboot-[sg]et:/reboot-/
attr nas devStateIcon status-on:general_an:Aus status-off:general_aus:Ein steuern-.*:hourglass reboot-.*:hourglass
attr nas eventMap /on g2:Ein/off g2:Aus/on g3:Reboot/
attr nas webCmd Ein:Aus:Reboot


Ergebnis sieht dann so aus - state enthält:
status-on ODER steuern-off ODER reboot-on ODER...

Damit kann ich ein-eindeutig agieren. Dafür habe ich das Attribut stateRgex auch gebaut :-)


Wie gesagt hab ich aber noch nicht verstanden, was Du willst...Beispielsweise zur Auswertung von Energie und Strom würd ich eher auf userreadings ausweichen und die entsprechenden Readings getG2 und getG3 hernehmen...

Grüße, Andi

Grüße, Andi

th1984

Hallo Andi,

danke für deinen Input. Allerdings glaube ich sind wir noch nicht ganz bei einander. Was ich will ist eigentlich mal sehr simpel. Ich versuch es mal nochmal zu erklären und mein Problem darzustellen: Ich habe mein Device, welches eine Steckdose mit 3 Funktionen abbildet: Funktion 1: schalten, Funktion 2 Stromwert ausgeben, Funktion 3 kwh sammeln und ausgeben. Getrennt voneinander funktioniert alles prächtig. Wenn ich es aber in ein Device zusammenfasse wie hier:


define og_bu_steckdose_neben_fenster_links KNX 7/2/6:dpt1:status 6/4/7:dpt9.021:ma 6/4/2:dpt13.010:kwh
attr og_bu_steckdose_neben_fenster_links IODev KNX
attr og_bu_steckdose_neben_fenster_links alias Schreibtisch Thomas
attr og_bu_steckdose_neben_fenster_links group Steckdose
attr og_bu_steckdose_neben_fenster_links room OG_Büro
attr og_bu_steckdose_neben_fenster_links stateRegex /status-[sg]et:/status-/


bekomme ich nach kurzer Zeit folgende Readings:

last-sender 1/1/17 2016-12-17 20:27:20
ma-get 0.00 mA 2016-12-17 20:27:20
state ma-get:0.00 mA 2016-12-17 20:27:20
status-get on 2016-12-17 20:26:51
status-set off 2016-12-17 20:27:11


Mir geht es jetzt darum, dass ich aus dem state nicht lesen kann, ob die Steckdose jetzt ein oder aus ist, da wie in diesem Fall zwischenzeitlich ein neues Reading mit mA dazwischen gefunkt hat. Vielleicht jetzt eine saublöde Frage, aber kann man das verhindern das ein Reading im State landet, ich glaub das würde mein Problem lösen. Auf mA und kwh greife ich ja sowieso über get zu, das ist ja kein Problem und funkt aus. Für mich ist nur das Problem, dass ich beim Schalten in der KNX Welt das Reading status-get on auslöse und wenn ich in Fhem online rumspiele das status-set on. Quasi zwei Probleme auf einmal, allerdings wenn das State jeweils den aktuellen Schaltzustand hätte, wäre das hier leicht ausreichend.

Blöde Frage am Rande, warum gibt es eigentlich -set und -get nur getrennt? Warum nicht einfach ein Reading für beides? Bezogen auf den oberen Fall gäbe es dann keine Frage ob die Steckdose jetzt ein oder aus ist, egal was im state steht.

Ich hoffe ich konnte mein Problem etwas klarer formulieren.

Danke und schönen Abend!
Thomas

EIB-Fan

Hallo Thomas,

habe mir mal dein Device angeschaut.

Mich wundert, dass du keine getrennte Gruppenadresse für Schalten (set) und Status (get) hast.

Hier mal eine Beipiel aus meiner Konfiguration.


define EG_KUE_Steckdosen KNX 3/2/20:dpt1:schalten 3/2/21:dpt1:status 3/2/22:dpt7:betriebsstunden 3/2/23:dpt7:strom 3/2/24:dpt12:zaehler
attr EG_KUE_Steckdosen IODev tul
attr EG_KUE_Steckdosen devStateIcon on:message_socket@green off:message_socket
attr EG_KUE_Steckdosen event-on-change-reading status.*,strom.*:10,zaehler.*,betriebsstunden.*
attr EG_KUE_Steckdosen eventMap /on g1:AN/off g1:AUS
attr EG_KUE_Steckdosen room Küche
attr EG_KUE_Steckdosen stateCmd {sprintf("%s", ReadingsVal($name,"status-get",""))}
attr EG_KUE_SteckdosenwebCmd AN::AUS


Der Status wir hier per Icon mit AN und AUS dargestellt.

Gruß Jens

Andi291

Morgen Thomas,

jetzt hab ich Dich...Dann muss ich mich meinem Vorredner anschließen:

attr EG_KUE_Steckdosen {$state = sprintf("%s", "ReadingsVal($name,"status-get",""))}

holt nach jedem Event den zuletzt empfangenen Wert aus der GAD 7/2/6 - "Status" und schreibt ihn in state. Ich kann mich Jens allerdings nur anschließen - getrennte GA für steuern und Status sind zu empfeheln - das ist die Denke vom KNX. Schimpft sich "Rückmeldung".

Zu Deiner anderen Frage: früher gab es -set und -get nicht getrennt. Das widerum hatte aber zur Folge, dass ich nicht unterscheiden konnte, ob der Wert nun vom FHEM oder vom Bus kam. Auf vielfachen Wunsch (auch meinen eigenen :-)) hab ich das geändert.

Grüße, Andi

th1984

Hallo Andi,

danke für die Info. Ich habs bei mir probiert, haut aber nicht hin und es erscheint immer der oben genannte Fehler im Log. Allerdings hab ich festgestellt, dass irgendwas anderes nicht ganz in Ordnung ist, werde daher vorerst mal eine saubere neue Installation herstellen (Qnap und VM) und dann dank eurer Hilfe auch dieses Thema lösen. Auch das mit der Rückmeldung und KNX schau ich mir nochmal näher an.

Danke ;-)
Thomas

Löwenzahn

Zitat von: EIB-Fan am 18 Dezember 2016, 00:17:08


define EG_KUE_Steckdosen KNX 3/2/20:dpt1:schalten 3/2/21:dpt1:status 3/2/22:dpt7:betriebsstunden 3/2/23:dpt7:strom 3/2/24:dpt12:zaehler
attr EG_KUE_Steckdosen IODev tul
....


Hallo Jens,
ich würde gerne wissen, wo der Vorteil der "mehrfach Definition" gegenüber der "Separierten" liegt ?!
Momentan habe ich alle GAs die ich in FHEM verwende einzeln definiert.
z.B.

define EG_KUE_Steckdosen__EA KNX 3/2/20:dpt1
....



define EG_KUE_Steckdosen__Status KNX 3/2/21:dpt1
....


Zugegeben es ist etwas mehr Arbeit bei der Einrichtung, aber .... ?  ::)
Vielen Dank

Gruß Lutz

Andi291

Abend!

Es lassen sich ohne Notifies einfach Zustände eines physikalischen Gerätes mit einem FHEM-Device abbilden. Bsp. aus der commandref:
Zitat
      define myLamp KNX 0/1/1:dpt1 0/1/2:dpt1 0/1/2:dpt1
     attr myLamp stateRegex /getG1:/steuern:/ /getG2:/status:/ /getG3:/sperre:/ /setG[13]:/steuern:/ /setG[3]://
     attr myLamp devStateIcon status.on:general_an status.off:general_aus sperre.on:lock steuern.*:hourglass

Grüße, Andi

Löwenzahn

Perfekt, Danke.

Manchmal sieht man den Wald nicht.

Gruß Lutz