Hauptmenü

userReadings manipulieren

Begonnen von Kurt77, 25 Januar 2022, 11:25:03

Vorheriges Thema - Nächstes Thema

Kurt77

hallo,
wirklich ein wahrscheinlich banales Problem, das mich seit 2 Tagen beschäftigt.

code:
--------------------------
define zaehler dummy
attr zaehler userReadings zaehler1
--------------------------

Es ffunktioniert in der fhem-Komandozeile:
code:
--------------------------
setreading zaehler zaehler1 5
--------------------------

Es ffunktioniert in perl nicht:
code:
--------------------------
fhem ("setreading zaehler zaehler1 5");
--------------------------

Was geht hier schief?

Danke und Gruß,
Kurt

Beta-User

Zum einen: Steht was im FHEM-log?

Zum anderen: userReadings in dummy sind "Mist" - es gibt (in der Regel) keine auslösenden Trigger _innerhalb des dummy_ (und userReadings ohne Trigger sind auch nicht empfehlenswert).

Vielleicht schilderst du besser, was du eigentlich erreichen willst...?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Kurt77

Hallo Beta-user,
im log steht nichts.

Was ich erreichen will:
Ein at prüft jede halbe Stunde, ob eine Bedingung erfüllt ist.
Wenn sie 3-mal erfüllt ist, löse eine Aktion aus.
Zu diesem Zwweck will ich zaehler1 nach jeder Prüfung um 1 erhöhen.

Danke und Gruß,
Kurt

Beta-User

Hmm,

vielleicht mal ein Ansatz:
defmod a1 at +*00:30 setreading a1 test {(Each('a1','1,2,3'))}
Das könntest du um deine Bedingungsprüfung erweitern:
defmod a1 at +*00:30 setreading a1 test {(Each('a1','1,2,3') if <hier deine Prüfung>)}
Der Zähler wird dann auf bis zu 3 hochgezählt, du kannst dann einen Eventhandler auf die Änderung des "test"-Readings ansetzen und deine Aktion auslösen, wenn die 3 (direkt am at gesetzt) erreicht ist.
Danach wäre halt zu klären, ob erst wieder 1/2 h gewartet werden soll oder wie es weitergeht...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Kurt77

Hallo Beta-user,
danke, aber das ist ja hochkompliziert!

Wenn ich Code schreibe, habe ich den anspruch, auch in 4 Wochen noch zu kapieren, was ich da gemacht habe.

Im Grunde reduziert sich doch alles auf das banale Problem, wie man ein userReading manipuliert. Und das gelingt mir in perl nicht.

Hast Du noch einen Vorschlag?

Danke und Gruß,
Kurt

Beta-User

Zitat von: Kurt77 am 25 Januar 2022, 12:12:43
Im Grunde reduziert sich doch alles auf das banale Problem, wie man ein userReading manipuliert. Und das gelingt mir in perl nicht.
Nö. Was du brauchst, ist _kein userReading_, sondern ggf. einfach ein "normales Reading" (irgendwo).

Nochmal zur Klarstellung: userReadings "rechnen" per Definition "selbständig", und es braucht einen "trigger" am Device, an dem sie hängen. Diese Funktionalität brauchst du gar nicht.

Übrigens: Wenn es unbedingt ein separater dummy sein soll: schau dir mal "readingList" (und "setList") an...

Und ohne Bedingung und "Folgeaktion" zu kennen, kann auch niemand (wesentlich) detaillierter helfen.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Kurt77

hallo Beta-user,
vielen Dank für die Information, dass ich mit userReading auf dem Holzweg bin.
Ich werde also jetzt über "set" gehen, d.h., dass ich den Zähler in "state" schreibe.

Gruß Kurt

Beta-User

...kann man so machen...

Ich gebe allerdings zu bedenken, dass es vermutlich übersichtlicher ist, wenn du dafür keinen extra "dummy verschwendest", sondern das Reading (wie auch immer das heißen soll) "irgendwo" hinschreibst. Ich würde das eben bei dem "at" machen für den Timer, den du ja auch brauchst...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

jhohmann

Wenn der Dummy mehrere Sachen zählen soll, ist er eventuell nicht überflüssig.
Wenn der Dummy behalten werden soll, einfach mal das userReadings Attribut löschen.
Ein setreading zaehler zaehler1 5 sollte dann trotzdem funktionieren, sowohl über die FHEMWEB Zeile als auch aus perl mit fhem("...").
Ich habe sowohl an Dummys als auch an "normalen" Devices selbst bereits Zusatzreadings auf die Art ergänzt.

Wenn du ein anderes Device hast, z.B. das hier erwähnte at, kannst du das einfach dort ergänzen, ohne weitere Vorgaben oder Definitionen am at selbst.
setreading atZurUeberpruefung zaehler1 5
Und wenn die Überprüfung abgeschlossen ist, kannst du überlegen, ob das Reading dann auf 0 gesetzt wird, oder mittels deletereading komplett wieder entfernt wird.
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

betateilchen

Zitat von: Kurt77 am 25 Januar 2022, 11:38:24
Ein at prüft jede halbe Stunde, ob eine Bedingung erfüllt ist.
Wenn sie 3-mal erfüllt ist, löse eine Aktion aus.

Sowas würde ich einfach über einen watchdog lösen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Beta-User

Zitat von: jhohmann am 25 Januar 2022, 15:10:19
Wenn der Dummy mehrere Sachen zählen soll,
Es wäre mir wirklich neu, dass ein dummy irgendwas von sich aus zählt (vielleicht abgesehen von der Verwendung im Zusammenhang mit FHEM2FHEM). Es ist einfach ein "virtueller Ort", an dem man Werte speichern kann und mit dem man ggf. irgendwelche Bedieninterfaces zusammenbasteln kann...

Zitat von: betateilchen am 25 Januar 2022, 15:47:56
Sowas würde ich einfach über einen watchdog lösen.
Vielleicht wäre das eine Option.

Aber bisher hat der TE ja nur verlauten lassen, dass er "irgendwas irgendwie" (bis auf eine bestimmte Höchstzahl) hochzählen will, ohne uns mitzuteilen, wie die sonstigen Rahmenbedingungen sind...
Mal sehen, ob wir dazu noch was erfahren.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Kurt77

Zitat von: jhohmann am 25 Januar 2022, 15:10:19
Wenn der Dummy mehrere Sachen zählen soll, ist er eventuell nicht überflüssig.
Wenn der Dummy behalten werden soll, einfach mal das userReadings Attribut löschen.
Ein setreading zaehler zaehler1 5 sollte dann trotzdem funktionieren, sowohl über die FHEMWEB Zeile als auch aus perl mit fhem("...").
setreading atZurUeberpruefung zaehler1 5
Hallo jhohmann,
mir fällt jetzt auf, dass in der fhem-Kommandozeile alles funktioniert: ich kann sowohl readings als auch userReadings manipulieren.
In perl dagegen funktioniert nichts.
also
setreading zaehler zaehler1 5 # o.k.
fhem ("setreading zaehler zaehler1 5"); # funktioniert nicht

Hast Du dazu eine Idee?

Danke und Gruß,
Kurt

betateilchen

Zitat von: Kurt77 am 25 Januar 2022, 16:10:03
setreading zaehler zaehler1 5 # o.k.
fhem ("setreading zaehler zaehler1 5"); # funktioniert nicht

Das erste ist ein FHEM Befehl, den man "einfach so" in die FHEM Befehlszeile eintippen kann.
Das zweite ist der Aufruf einer perl Funktion, der in geschweiften Klammern stehen muss, wenn man ihn in der FHEM Befehlszeile eingeben möchte.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Kurt77

Zitat von: betateilchen am 25 Januar 2022, 16:17:06
Das erste ist ein FHEM Befehl, den man "einfach so" in die FHEM Befehlszeile eintippen kann.
Das zweite ist der Aufruf einer perl Funktion, der in geschweiften Klammern stehen muss, wenn man ihn in der FHEM Befehlszeile eingeben möchte.
hallo betateilchen,
der unterschied ist mir klar. die zweite zeile hatte ich aus einer ssub herauskopiert.

Also in der fhem Kommandozeile funktioniert nicht:
{("setreading zaehler zaehler1 5")}

Danke und Gruß,
Kurt

Beta-User

Zitat von: Kurt77 am 25 Januar 2022, 16:27:18
{("setreading zaehler zaehler1 5")}
... mach' mal Pause und schnauf richtig durch...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files