FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: 87insane am 16 September 2019, 17:18:42

Titel: userReadings werden nicht gesetzt
Beitrag von: 87insane am 16 September 2019, 17:18:42
Hallo zusammen,

ich habe mal wieder ein Thema an dem ich hänge.

Ich habe eine Waschmaschine und einen Trockner. Beide haben im Eintrag userReadings folgendes stehen:
userReadings
total_temp:running.*true.* { ReadingsVal("$name","total",0) },
gang:running.*false.* { ReadingsVal("$name","total",0) - ReadingsVal("$name","total_temp",0) },
running {(ReadingsVal("$name","power",0) > ReadingsVal("$name","swerta",0)) ? 'true' : 'false'}


Das Reading running, wird bei beiden korrekt gesetzt.
Die Readings gang und total_temp macht nur die Waschmaschine korrekt. Im Trockner passiert da leider nichts.
total_temp sollte nur den aktuellen Wert aus total in total_temp schreiben. Das passiert aber beim Trockner nicht. Deswegen klappt auch die Berechnung von "gang" am Ende nicht.

Wenn ich total auslesen will und das über die Kommandozeile teste, geht es ({ ReadingsVal("s_trockner","total","error") }). Auch wenn ich "s_trockner" im userReading anstelle von "$name" eingebe, geht es nicht.

Wenn ich manuell setreading auf total_temp setze, geht es auch. Ich bin hier ratlos.
Der einzige Unterschied der mir noch einfällt, wäre das eine Gerät (Waschmaschine) ist ein Shelly und kommt über MQTT2 rein. Der Trockner ist ein TPLink Zwischenstecker.

Ich hoffe ich habe einfach nur die ganze Zeit was übersehen. Mir ist nicht klar warum "s_trockner total" nicht ausgelesen werden kann vom userReadings aber über die Kommandozeile schon. Wenn ich mir die Benachrichtigungen (pushbullet) ansehe auf meinem Handy. Bekomme ich nachdem ich total_temp z.B. manuell über setreading setze auch den korrekten Zeitstempel vom Reading ausgelesen. Also wenn das Ding vor 2 Minuten von mir manuell beschrieben wurde, steht in der Nachricht auch die korrekte Zeit. Nur der Inhalt des Readings will nicht. Hoffe ich habe alles gut genug erklärt, bin selber ganz durch den Wind nun.

Anbei mal jeweils ein List der Geräte.

Trockner (GEHT NICHT):


Internals:
   CFGFN      ./FHEM/Energie.cfg
   DEF        192.168.20.20
   FUUID      5c443c13-f33f-fcb4-e2e7-1e81da53f8d83f39
   HOST       192.168.20.20
   INTERVAL   60
   NAME       s_trockner
   NEXTUPDATE Mon Sep 16 17:11:07 2019
   NR         38
   STATE      on
   TIMEOUT    1
   TYPE       TPLinkHS110
   OLDREADINGS:
   READINGS:
     2019-09-16 17:10:07   active_mode     schedule
     2019-09-16 17:10:07   alias           s_trockner
     2019-08-13 17:34:17   aname           Der Trockner
     2019-09-16 17:10:07   current         0.013098
     2019-09-16 17:10:07   daily_average   0.45975
     2019-09-16 17:10:07   daily_total     0.000
     2019-09-16 17:10:07   decode_json     ok
     2019-09-16 17:10:07   dev_name        Wi-Fi Smart Plug With Energy Monitoring
     2019-09-16 17:10:07   deviceId        8006874906580C5CE4E5412EEE59F5AF18DFD0AA
     2019-09-16 17:10:07   err_code        0
     2019-09-16 17:10:07   feature         TIM:ENE
     2019-09-16 17:10:07   fwId            00000000000000000000000000000000
     2019-08-29 12:00:17   gang            0
     2019-09-16 17:10:07   hwId            45E29DA8382494D2E82688B52A0B2EB5
     2019-09-16 17:10:07   hw_ver          1.0
     2019-09-16 17:10:07   icon_hash       
     2019-09-16 17:10:07   latitude        49.222381
     2019-09-16 17:10:07   led_off         1
     2019-09-16 17:10:07   longitude       9.984479
     2019-09-16 17:10:07   mac             50:C7:BF:BD:86:52
     2019-09-16 17:10:07   model           HS110(EU)
     2019-09-16 17:10:07   monthly_total   7.356
     2019-09-16 17:10:07   oemId           3D341ECE302C0642C99E31CE2430544B
     2019-09-16 17:10:07   on_time         969388
     2019-09-16 17:10:07   power           0
     2019-09-16 17:10:07   relay_state     1
     2019-09-16 17:10:07   rssi            -73
     2019-09-16 17:10:07   running         false
     2019-09-16 17:10:07   state           on
     2019-09-16 17:10:07   sw_ver          1.2.5 Build 171213 Rel.101523
     2019-08-13 17:35:53   swerta          45
     2019-08-13 17:36:07   swerte          40
     2019-09-16 17:10:07   total           4.054
     2019-09-16 17:09:59   total_temp      0
     2019-09-16 17:10:07   type            IOT.SMARTPLUGSWITCH
     2019-09-16 17:10:07   updating        0
     2019-09-16 17:10:07   voltage         239.060665
Attributes:
   alias      Keller Wäsche Trockner
   devStateIcon { my $pic = ReadingsVal($name,"running","") eq "true"?'scene_clothes_dryer@green':'scene_clothes_dryer';;  my $text = ReadingsVal($name,"running","") eq "true"?"Trockner läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';;  "<div><a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>&nbsp;&nbsp;&nbsp;".FW_makeImage($pic)." $text </div>" }
   disable    0
   event-on-change-reading .*
   group      Strom
   interval   60
   room       FHEM / Info,Keller
   userReadings total_temp:running.*true.* { ReadingsVal("$name","total","error") },
gang:running.*false.* { ReadingsVal("$name","total","error") - ReadingsVal("$name","total_temp","error") },
running {(ReadingsVal("$name","power",0) > ReadingsVal("$name","swerta",0)) ? 'true' : 'false'}
   verbose    1
   webCmd     :



Waschmaschine (GEHT):


Internals:
   CID        shellyplug_s_040C7E
   DEF        shellyplug_s_040C7E
   DEVICETOPIC MQTT2_shellyplug_s_040C7E
   FUUID      5d4c47d9-f33f-fcb4-c859-f484bf00612f2b75
   IODev      MQTT2_FHEM_Server
   LASTInputDev MQTT2_FHEM_Server
   MQTT2_FHEM_Server_MSGCNT 58560
   MQTT2_FHEM_Server_TIME 2019-09-16 17:11:17
   MSGCNT     58560
   NAME       MQTT2_shellyplug_s_040C7E
   NR         382
   STATE      on
   TYPE       MQTT2_DEVICE
   READINGS:
     2019-08-13 17:34:03   aname           Die Waschmaschine
     2019-09-16 17:02:49   fw_ver          20190821-095311/v1.5.2@4148d2b7
     2019-09-15 14:38:32   gang            1.73
     2019-09-16 17:02:49   id              shellyplug-s-040C7E
     2019-09-16 17:02:49   ip              192.168.20.23
     2019-09-16 17:02:49   mac             4C11AE040C7E
     2019-09-16 17:02:49   new_fw          false
     2019-09-16 17:02:49   online          true
     2019-09-16 17:11:17   overtemperature 0
     2019-09-16 17:11:17   power           0
     2019-09-16 17:11:17   relay0          on
     2019-09-16 17:11:17   relay_0_energy  1.77
     2019-09-16 17:11:17   running         false
     2019-09-16 17:10:47   statRelay_0_energy Hour: 0.000000000000000000 Day: 0.010000000000000007 Month: -3.699999999999996625 Year: 0.370000000000030083 (since: 2019-08-16 )
     2019-09-16 17:10:47   statRelay_0_energyDay 0.010000000000000007
     2019-09-15 23:59:55   statRelay_0_energyDayLast 1.750000000000000000
     2019-09-16 16:59:55   statRelay_0_energyLast Hour: 0.000000000000000000 Day: 1.750000000000000000 Month: 4.070000000000030482 Year: - (since: 2019-08-16 )
     2019-09-16 17:10:47   statRelay_0_energyMonth -3.699999999999996625
     2019-08-31 23:59:55   statRelay_0_energyMonthLast 4.070000000000030482
     2019-09-16 17:10:47   statRelay_0_energyYear 0.370000000000030083
     2019-09-16 17:11:17   state           on
     2019-08-13 17:35:21   swerta          4
     2019-08-13 17:35:34   swerte          4
     2019-09-16 17:11:17   temperature     29.35
     2019-09-16 17:11:17   temperature_f   84.83
     2019-09-15 11:39:26   total_temp      0.02
   helper:
     _98_statistics statisticsDEV
Attributes:
   IODev      MQTT2_FHEM_Server
   alias      Keller Waschmaschine
   devStateIcon { my $amp = ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "false" || ReadingsVal($name,"online","false") eq "false" && ReadingsVal($name,"new_fw","false") eq "true" ? "rot" : ReadingsVal($name,"online","false") eq "true" && ReadingsVal($name,"new_fw","false") eq "true" ? "gelb" : "gruen";;  my $pic = ReadingsVal($name,"running","") eq "true"?'scene_laundry_room_fem@green':'scene_laundry_room_fem';;  my $text = ReadingsVal($name,"running","") eq "true"?"Waschmaschine läuft - Aktuell: ".ReadingsVal($name,"power","")." W":'Standby';;  my $show = "$amp" eq "gelb" ? "<a href=\"/fhem?cmd.dummy=set $name x_update&XHR=1\">".FW_makeImage("10px-kreis-".$amp)."</a>" : "<a href=\"http://".ReadingsVal($name,"ip","none")." \"target=\"_blank\">".FW_makeImage("10px-kreis-".$amp)."</a>";;  "<div> $show <a href=\"/fhem?cmd.dummy=set $name toggle&XHR=1\"></a>".FW_makeImage($pic)." $text </div>" }
   event-on-change-reading .*
   genericDeviceType switch
   group      Strom
   model      A_10a_shellyplug
   readingList shellies/shellyplug-s-040C7E/relay/0:.* state
  shellies/shellyplug-s-040C7E/relay/0:.* relay0
  shellies/shellyplug-s-040C7E/input/0:.* input0
  shellies/shellyplug-s-040C7E/online:.* online
  shellies/shellyplug-s-040C7E/announce:.* { json2nameValue($EVENT) }
  shellies/announce:.* { $EVENT =~ m,..id...shellyplug-s-040C7E...mac.*, ? json2nameValue($EVENT) : undef }
  shellies/shellyplug-s-040C7E/relay/0/power:.* {'power' => $EVENT > 1 ? $EVENT : '0'}
  shellies/shellyplug-s-040C7E/temperature:.* temperature
  shellies/shellyplug-s-040C7E/overtemperature:.* overtemperature
  shellies/shellyplug-s-040C7E/relay/0/energy:.* {'relay_0_energy' => sprintf("%.2f",$EVENT/60/1000)}
  shellies/shellyplug-s-040C7E/temperature_f:.* temperature_f
   room       FHEM / Info,Keller,MQTT
   setList    off:noArg shellies/shellyplug-s-040C7E/relay/0/command off
  on:noArg shellies/shellyplug-s-040C7E/relay/0/command on
  x_update:noArg shellies/shellyplug-s-040C7E/command update_fw
  x_mqttcom shellies/shellyplug-s-040C7E/command $EVTPART1
   userReadings total_temp:running.*true.* { ReadingsVal("$name","relay_0_energy",0) },
gang:running.*false.* { ReadingsVal("$name","relay_0_energy",0) - ReadingsVal("$name","total_temp",0) },
running {(ReadingsVal("$name","power",0) > ReadingsVal("$name","swerta",0)) ? 'true' : 'false'}




DANKE an alle :)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: amenomade am 16 September 2019, 18:33:28
Leider kann man mit deinen "list" nicht genau feststellen, was passiert ist.

Deine Readings total_temp werden jedes Mal gesetzt, wenn ein Ereignis "running true" kommt.
Die stehen aber in den "list" auf false.

Anscheinend ist beim Trockner running letztes Mal um 17:09:59 true gewesen und dabei war total gleich 0
Und bei der Waschmaschine gestern um 11:39 und dabei war total 0.02 (komischerweise gibt es im Device kein Reading "total" laut list)

Um etwas sagen zu können, muss man die Events aus dem Eventmonitor, oder die Log sehen.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 16 September 2019, 19:16:35
Wer viel schreibt, kann viel vergessen. Uff...sorry.

Hatte erwähnt das es unterschiedliche geräte sind aber vergessen userReadings von der Waschmaschine mit zu senden. Da sind aber auch nur anstelle von "total" das Energy Reading vom shelly drin. Hatte es sogar heute Mittag nochmal hin und her kopiert, weil ich dachte es fehlt ggf nur ein Komma oder so und ich sehe das einfach nicht.

Das der trockner Direkt aus war ist normal. Wenn ich via setreading auf das Energy Reading einen wert gebe, der Running auf True setzt, danach aber relativ schnell ein Status Update des Gerätes dahinter.

Event oder / und log mache ich morgen. Sende ich nach. Danke schon mal :)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 08:07:37
Hey und guten Morgen,

hier mal ein EventMonitor Auszug....
2019-09-17 07:57:01 TPLinkHS110 s_trockner power: 100
2019-09-17 07:57:01 TPLinkHS110 s_trockner running: true
2019-09-17 07:57:23 TPLinkHS110 s_trockner on_time: 1022622
2019-09-17 07:57:23 TPLinkHS110 s_trockner current: 0.012649
2019-09-17 07:57:23 TPLinkHS110 s_trockner power: 0
2019-09-17 07:57:23 TPLinkHS110 s_trockner voltage: 237.152871
2019-09-17 07:57:23 TPLinkHS110 s_trockner running: false

Regex zu running sollte also passen. Da das Reading ja eh durch mich erzeugt wurde, sollte es ja auch bei allen Geräten gleich aussehen und reagieren. Hab ja sogar .* genommen. Etwas groß aber so kann eigentlich ja nichts durch rutschen in dem Fall.

ZitatAnscheinend ist beim Trockner running letztes Mal um 17:09:59 true gewesen und dabei war total gleich 0
17:09:59 war total 4.054. total_temp war zu dem Zeitpunt 0. Genau das ist ja mein Problem. Es wird aus einem mir unbekanntem Grund nicht gesetzt. total_temp sollte der Wert aus total, zum Zeitpunkt des Starts vom Trockner sein.

Anbei, vollständigkeitshalber auch nochmal userReadings von der Waschmaschine, separat. Bei der ein genutztes Reading abweicht aber der Rest gleich ist:
total_temp:running.*true.* { ReadingsVal("$name","relay_0_energy",0) },
gang:running.*false.* { ReadingsVal("$name","relay_0_energy",0) - ReadingsVal("$name","total_temp",0) },
running {(ReadingsVal("$name","power",0) > ReadingsVal("$name","swerta",0)) ? 'true' : 'false'}

Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: DeeSPe am 17 September 2019, 08:37:59
Ich würde das etwas anders machen:
total_temp:running:.true { ReadingsNum("$name","relay_0_energy",0) },
gang:running:.false { ReadingsNum($name,"relay_0_energy",0) - ReadingsNum($name,"total_temp",0) },
running:(power|swerta):.* {(ReadingsNum($name,"power",0) > ReadingsNum($name,"swerta",0)) ? 'true' : 'false'}


Gruß
Dan
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 10:01:21
Hi,

habe das mal angepasst. Allerdings habe ich die Regex auf swerta bei running weg gelassen, da dieser Wert sich nicht ändert. Er ist nur da um das Script für alle Geräte einheitlich zu machen. So kann ich bei jedem Gerät einen Schwellwert eintragen ab wann es reagieren soll.

Ist zumindest schneller aufgrund der Eingrenzung. Für den Trockner wäre es dann so:

total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false'}


Ich frage mich ob ich das Wiki zu ReadingsNum falsch verstehe. Aber es geht damit ja auch, anscheinend.
Die Sache an sich geht aber noch immer nicht.

Anbei das Event Log. Das Verhalten ist noch identisch zu dem Verhalten vorher. (geht nicht).
2019-09-17 09:38:32 TPLinkHS110 s_trockner power: 100
2019-09-17 09:38:32 TPLinkHS110 s_trockner running: true
2019-09-17 09:39:14 TPLinkHS110 s_trockner on_time: 1028733
2019-09-17 09:39:14 TPLinkHS110 s_trockner current: 0.012861
2019-09-17 09:39:14 TPLinkHS110 s_trockner power: 0
2019-09-17 09:39:14 TPLinkHS110 s_trockner voltage: 238.133898
2019-09-17 09:39:14 TPLinkHS110 s_trockner running: false


total_temp wird weiterhin nicht beschrieben. Hätte mich aber auch gewundert. Das alles ist nun etwas schöner (DANKE dafür) aber vom Prinzip her ja noch genau das gleiche.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 11:59:38
Hi,

wenn ich das in der FHEM Komandozeile einwerfe:
{my $var="w1";;$var=ReadingsNum($var,"state","Error")}
bekomme ich 29 weil das im state von w1 steht
Wenn ich das mache
{my $var="w1";;$var=ReadingsNum("$var","state","Error")}
Bekomme ich 1 zurück.

Du solltest deinen Code mal in der FHEM Kommandozeile testen  ;)

Ich bin selbst nicht nicht ganz sicher wie richtig oder falsch die " " um die Variable herum sind. Ich hatte letztens bei mir einen Fall (set magic) da war das " " um $EVENT notwendig und ich weiß eigentlich nicht warum.
Dan hat es auch mal so und mal so gemacht ;)

Gruß Otto
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 12:43:33
Hey Otto123,

mich wundert es da es genauso in dem anderem Gerät funktioniert. Der Code ist 1 zu 1 der gleiche. Hatte auch schon mit und ohne "" bei $name getestet. Hatte auch gedacht, dass ich für sowas keinen Thread mehr aufmachen muss aber ich bin echt am Ende mit meinen Ideen. Über die Kommandozeile, war natürlich mein erster Weg...

Ein gutes Beispiel ist zb:
total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false'}


Das Reading running wird korrekt gesetzt wenn der Wert Power oberhalb des gewünschten Schwellwertes ist. Man sieht direkt wie running auf true springt. Aber die beiden anderen machen leider nix. total_temp müsste als erstes beschrieben werden, mit dem Wert der zu der Zeit in total steht. Wenn ich nun in total_temp via setreading einen Wert rein schreibe und dann POWER über den Schwellwert schicke, müsste da ja irgendwas passieren. Selbst wenn er das Reading nicht kennen würde, müsste dann ja wieder "0" drin stehen, da ja in der Abfrage ReadingsNum("$name","total",0) steht. Mir kommt das vor als wäre dieses eine Reading schreibgeschützt oder so. Hab sogar alle Readings mal aus dem Gerät gelöscht und neu angefangen. Auch ohne Erfolg.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 12:58:31
Mir fällt noch auf, das ein userReading (gang) auf dem anderen aufbaut. Ich weiß nicht ob das gut geht. Ich erinnere mich da gab es Fälle, da waren alle zwischenzeitlich "leer"

ZitatAuch ohne Erfolg.
Aber sie werden einmalig angelegt?
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 13:17:11
In der Waschmaschine werden sie angelegt, berechnet und da geht alles.
Im Trockner wird nur running angelegt. Die beiden anderen Readings leider nicht. Die habe ich zum testen mal rein geworfen (manuell).

Wie sollte es sein?
Running geht auf Wert > swerta und setzt running auf true.
Nun wird das Event für running erzeugt und da wird einfach nur der Wert von total in total_temp geschrieben.
Wenn das Gerät nun fertig ist mit waschen/trocknen wird erst gang berechnet.

Will damit nur sagen das es nicht um ms geht oder so. Ich hatte zum testen auch einfach mal total_temp:running:.true { 666 } oder x andere Varianten getestet. Geht auch nicht. Wo ist der heulende Smilie :-P


EDIT: Gerade nochmal alle Readings aus s_trockner gelöscht. Danach manuell swerta und aname angegeben via Kommandozeile. Danach habe ich POWER auf 100W gesetzt und sofort wurde running angelegt. Der Rest aber nicht... (gang und total_temp).
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 13:34:51
Und wenn Du mal
Zitatverbose    1
anders setzt? Steht dann etwas Informatives im Log?
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 13:45:33
Leider nein... Habe sogar global mal auf 5 gesetzt :-\
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Beta-User am 17 September 2019, 14:24:12
Schuß in's Blaue: Versuch mal, an den ersten beiden den trigger mit ".*" zu erweitern, und ob der Doppelpunkt da evtl. einen Einfluß hat, kann ich auch nicht sagen.

Also so: total_temp:running.*true.* { ReadingsNum("$name","total",0) },
gang:running.*false.* { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false'}


Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 14:27:57
userReadings
total_temp:running.*true.* { ReadingsVal("$name","total",0) },
gang:running.*false.* { ReadingsVal("$name","total",0) - ReadingsVal("$name","total_temp",0) },
running {(ReadingsVal("$name","power",0) > ReadingsVal("$name","swerta",0)) ? 'true' : 'false'}


Daher komme ich leider.. In der Waschmaschine läuft das auch genau so (beide Varianten)


Hab das ganze auch nochmal in zwei andere Geräte eingegeben. Dort werden die Readings auch sofort erzeugt. Hab zum testen einfach mal ein paar Lampen genommen.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 14:38:49
Zitat von: 87insane am 17 September 2019, 13:45:33
Leider nein... Habe sogar global mal auf 5 gesetzt :-\
Das ändert aber nichts an Deinem verbose 1 am Gerät!? Ich will es nur anmerken  ;)

Und irgendwie erinnert mich das an den Thread wo es nicht immer Events vom Gerät gab (https://forum.fhem.de/index.php/topic,103377.0.html)? Aber Du sagst ja die kommen ...
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 14:39:55
Keine Sorge... Das hatte ich natürlich auch gemacht. Mittlerweile behaupte ich die Zusammenhänge ein wenig zu verstehen :)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 14:46:06
Zitat von: 87insane am 17 September 2019, 14:39:55
Keine Sorge... Das hatte ich natürlich auch gemacht. Mittlerweile behaupte ich die Zusammenhänge ein wenig zu verstehen :)
Ich wollte Dir nichts unterstellen :) aber manchmal denkt man ja nicht dran. Vor allem wenn einen das Thema zur Verzweiflung bringt
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 14:52:34
Hab ich auch nicht so aufgefasst... Bin für jede Hilfe dankbar!
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 14:56:07
Wenn Du sagst die Readings werden gar nicht angelegt, dann bau doch mal zwei notifys auf diesen trigger  (https://wiki.fhem.de/wiki/Notify)und mach einfach einen Log Eintrag. Und wenn das geht packst Du den Code mal da rein, mit setreading. Nur zum Test
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Beta-User am 17 September 2019, 14:58:00
Ok, also nochmal von vorne:

Grundsätzlich würde ich tippen, dass Otto recht hat, mit der Vermutung, dass das "selbsttriggern" eventuell nicht (immer) geht - MQTT2_DEVICE scheint das nur aus irgendeinem Grund nicht zu wissen ;D .

Da du sowieso auf der Perl-Ebene bist, kannst du ggf. mal den Tip aus setreading adaptieren:
ZitatAchtung: setreading generiert kein Event für ein Gerät X, falls es aus einem notify für Gerät X aufgerufen wurde. In so einem Fall könnte man auf "sleep 0.1; setreading X Y Z" ausweichen.
Das müßte dann in den "running"-Code rein.

Zu '"$name"' noch: die Anführungszeichen sind in ReadingsVal() etc. unnötig, aber unschädlich; die werden einfach ignoriert ;) .
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 15:12:35
Habe das ganze Gerät nun gelöscht und neu angelegt...Brachte auch nichts.

Events kommen vom Gerät:
2019-09-17 15:04:02 Global global ATTR s_trockner userReadings total_temp:running:.true { ReadingsNum("$name","total",0) }, gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) }, running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false'}
2019-09-17 15:04:15 TPLinkHS110 s_trockner on_time: 60
2019-09-17 15:04:15 TPLinkHS110 s_trockner rssi: -77
2019-09-17 15:04:15 TPLinkHS110 s_trockner current: 0.012648
2019-09-17 15:04:15 TPLinkHS110 s_trockner voltage: 237.737219
2019-09-17 15:04:48 TPLinkHS110 s_trockner power: 100
2019-09-17 15:04:48 TPLinkHS110 s_trockner running: true
2019-09-17 15:05:15 TPLinkHS110 s_trockner on_time: 120
2019-09-17 15:05:15 TPLinkHS110 s_trockner rssi: -78
2019-09-17 15:05:15 TPLinkHS110 s_trockner current: 0.013103
2019-09-17 15:05:15 TPLinkHS110 s_trockner power: 0
2019-09-17 15:05:15 TPLinkHS110 s_trockner voltage: 237.585502
2019-09-17 15:05:15 TPLinkHS110 s_trockner running: false
2019-09-17 15:06:15 TPLinkHS110 s_trockner on_time: 180
2019-09-17 15:06:15 TPLinkHS110 s_trockner rssi: -75
2019-09-17 15:06:15 TPLinkHS110 s_trockner current: 0.012743
2019-09-17 15:06:15 TPLinkHS110 s_trockner voltage: 237.812688


Das triggern mache ich über 2 Ecken. Ich sette POWER auf einen Wert über swerta. Dann triggert running auch korrekt und springt auf true. Der Rest passiert dann aber leider nicht. Das geht auch nicht, wenn ich einfach einen Verbraucher an die Zwischendose stecke der mehr braucht als der eingegebene Schwellwert (swerta).

Also bisher alles ein wenig komisch... Wenn "running" angelegt wird, erwarte ich das auch vom Rest. Es muss also ja das triggern funktionieren. Zumindest über meinen Umweg oder aber einen Verbraucher. Was kann ich noch testen?

Oder inkludierst du hier auch das userReadings auch nur ein notify ist und das dieses selbst triggern nicht geht?




Okaaaaaaaayyyy.... Das ist aber nun für mich total komisch!

Wenn ich also setreading s_trockner power auf z.B. 100 setze, setzt er running. Aber nicht total_temp.
Wenn ich nun aber einfach weiter gehe und setreading running true setze, setzt er total_temp.

Passt also zu der Beschreibung die Ihr meint. Aber das kann doch eigentlich nicht so gewollt sein oder? Bei einem Gerät / Protokoll geht das, bei einem anderen nicht?
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 15:24:52
sleep 0.1 oder so einbauen?

ZitatNote: setreading won't generate an event for device X, if it is called from a notify for device X. Use "sleep 0.1; setreading X Y Z" in this case.

@Beta-User
Zitat von: Beta-User am 17 September 2019, 14:58:00
Zu '"$name"' noch: die Anführungszeichen sind in ReadingsVal() etc. unnötig, aber unschädlich; die werden einfach ignoriert ;) .
Da komm ich später nochmal drauf zurück  ::)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Beta-User am 17 September 2019, 15:28:04
userReadings ist jedenfalls eng verwandt mit notify. Das setzt intern einen Merker bei jedem auslösenden Gerät, dass es grade in der Eventverarbeitung ist (um Endlosschleifen zu vermeiden).

Da userReadings auch ohne trigger definiert werden können, MUSS es m.E. zwingend so was ähnliches geben, um Endlosschleifen zu verhindern (ohne das jetzt im Code von fhem.pl nachgesehen zu haben).

Zitat von: Otto123 am 17 September 2019, 15:24:52
@Beta-User
Da komm ich später nochmal drauf zurück  ::)
Bin mal gespannt, das ist eher empitische Erfahrung denn theoretisch fundiertes Fachwissen ;D .
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 15:59:58
Was ist denn hier am besten dann zu tun?

In einem MQTT Gerät geht es. Okay
In einem anderem nicht. Komisch oder gewollt....

An welcher stelle sollte der Benutzer/ich das am besten nun setzen? Verursache ich nicht ggf. mit sleep 0,1 im userReading nicht dann wieder neue Probleme?

Ich mag es einheitlich... Gut wäre z.B. etwas wie "setreading xyz 1" um ein Event absichtlich zu generieren oder eben 0 für nicht. Ich habe nun verstanden warum es hier nicht so geht wie ich dachte aber im EventMonitor sehe ich es ja auch. Zeigt der also nun etwas an was nicht stimmt? Ohne Euch wäre ich da so nicht drauf gekommen und ich bin sicher das verwirrt nicht nur mich.

Zurück zum Problem:
running wird getriggert da das ja durch den Power Wert kommt und der ja durch das Gerät direkt geliefert wird. Okay - verstanden - Das kann also so bleiben.

Wie baue ich das denn ins userReadings ein? Eigentlich müsste das ja dann direkt in running und in total_temp aber nicht mit in gang. Ich wüsste aktuell nicht wie ich sleep 0.1 da nun gut mit rein bekomme. Ich weiß, fertigen Code gibt hier keiner so gerne weiter aber das wäre nun echt eine Hilfe, nach der Nummer.

Zu den ganzen Fragen oben, könnte das hin hauen? Will nicht morgen den nächsten Side effect haben. :-\

total_temp:running:.true {sleep 0.1; ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) },
running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'sleep 0.1; true' : 'sleep 0.1; false'}


Wie löst ihr diese Trockner/Waschmaschinen-Geschichte?




ZitatDa komm ich später nochmal drauf zurück  ::)
ZitatBin mal gespannt, das ist eher empitische Erfahrung denn theoretisch fundiertes Fachwissen ;D .

Hattest mir da auch mal ein paar Übungen gegeben :-P --- Ich bin mir auch nicht immer sicher aber meist bekomme ich die Sachen zum laufen. Ob das dann perfekt ist, bezweifel ich. Wenn ihr das ggf. in einem Thread macht, ladet mich direkt mit ein. :)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 16:25:50
{sleep 0.1; ReadingsNum("$name","total",0) },So wäre auch mein Ansatz :)
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 16:52:46
Wenn ich nun richtig aufgepasst habe müsste NUR bei running das sleep 0.1 rein, um ein Event zu erzeugen.
Da running die beiden anderen Readings triggert. Das wiederum bekomme ich aber mit ternary IF nicht hin. Geht das überhaupt gleichzeitig darein?

running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false' }
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Beta-User am 17 September 2019, 17:01:43
Vorschlag: In den Code für "running" eine "trigger"-Anweisung für "running" nach einem sleep einbauen; das muß in eine "fhem ..."-Anweisung rein (oder AnalyzeCommandChain()). Also erst: Rückgabewert bestimmen, das "sleep/trigger"-Dingens mit dem gefundenen Rückgabewert aufrufen, dann erst die eigentliche Rückgabe.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 17:07:13
Beta-User: Deinen Vorschlag hab ich jetzt nicht verstanden. ;)

Warum soll das nicht so gehen?
running:power:.* {sleep 0.1;(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false' }

Ich weiß bloß nach wie vor nicht, ob das überhaupt die richtige Lösungsrichtung ist.  ::)

Hast Du mal notify und Log Eintrag probiert? Wird denn überhaupt getriggert? Lassen sich die Werte zu dem Zeitpunkt überhaupt mit deinem Code lesen?
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 17 September 2019, 17:14:21
Den Vorschlag von Beta habe ich auch noch nicht verstanden...

Die Idee:
running:power:.* {sleep 0.1;(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false' }
hatte ich auch und das geht leider nicht.

ZitatHast Du mal notify und Log Eintrag probiert? Wird denn überhaupt getriggert? Lassen sich die Werte zu dem Zeitpunkt überhaupt mit deinem Code lesen?
Ich könnte eins bauen, was das macht...
Hatte ja ein paar EventMonitore da gelassen mit dem alten Code. Da sieht man ja was passiert. Weswegen ich nach wie vor etwas verwirrt bin. In meinem langen Beitrag stellte ich dazu ja ein paar Fragen. Mir ist nicht klar wie ich im EventMonitor zwischen wirklichem Event und einem "nicht" wirklichem Event filtern sollte.
Die Werte sollten sich lesen lassen (vermutungs Modus), da es bei dem anderen Gerät auch geht. Auch wenn das andere ein MQTT Gerät ist, sind es ja am Ende des Tages auch nur Readings aber leider kein Trigger (bei nicht MQTT Gerät).

Ich werde heute wohl pausieren. Verstehe nur noch die Hälfte und brauche wohl mal ne Pause. Bin morgen aber wieder dran und freue mich natürlich über jede Hilfe. Hoffe ihr versteht wie das meine mit dem durch sein für heute.... Das war jetzt ein ganzer Tag voller Verzweifelung. :-\
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Beta-User am 17 September 2019, 17:20:27
Du nutzt damit aber kein FHEM-sleep, sondern Perl-sleep, oder? Bin nicht sicher, ob das das gewünschte Ergebnis (andere, nachgelagerte Einordnung in die Ereignisverarbeitung...) bewirkt ;) . Das hält nur den gesamten Verkehr auf, oder?
Das sollte bei durch die in den "fhem ..."-Aufruf gekapselter sleep-Anweisung anders sein, da wird ein InternalTimer gesetzt ;) .

running:power:.* {my $ret =(ReadingsNum($name,"power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false';; AnalyzeCommandChain(undef,"sleep 0.1;;trigger $name power $ret");;$ret }
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 17:40:15
Zitat von: Beta-User am 17 September 2019, 17:20:27
Du nutzt damit aber kein FHEM-sleep, sondern Perl-sleep, oder?
Oh Mist da hab ich auch wieder nicht dran gedacht, da ist mein Vorschlag für die Tonne
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: frank am 17 September 2019, 18:22:07
entferne mal die leerzeichen im attr userreading, die hinter den kommas zur trennung der readings existieren.

die liste der readings soll mit "kommas" getrennt werden, nicht mit "kommas plus leerzeichen".
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 19:56:18
Ich sehe da keine, nur Zeilenumbrüche.  :-[
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: frank am 17 September 2019, 20:03:12
in post #20, im eventmonitor mitschnitt, 1. zeile.
das sieht nach leerzeichen aus, finde ich.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: TomLee am 17 September 2019, 20:09:02
Die sind auch schon in den beiden List im ersten Post zu sehen, aber in beiden Geräten.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: Otto123 am 17 September 2019, 20:24:39
Das ist nur die Anzeige im Web.
Alles kopieren einfügen in Notepad++ - da sind keine Leerzeichen nur Kommas und Zeilenumbrüche
Im Eventmonitor sind welche im global. Da ist das bei mir auch so dargestellt obwohl im Original Device keine Leerzeichen sind.
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 18 September 2019, 07:54:34
Guten Morgen zusammen,

zu den Leerzeichen: Kommt wohl, wie bereits gesagt wegen der Webansicht. Aktiv sind keine dort. Würde aber bei Problemen auch im LOG auftauchen müssen. Da dort nichts steht und in FHEM keine zu sehen sind....Wurde alles schon gesagt. Danke

Ich habe mir das alles nochmal durch den Kopf gehen lassen.
Da ich einen externen/wirklichen Trigger brauche würde das ganze auch anders gehen, denke ich. Nun ist die Frage, was besser ist.

Zum einen hatte Beta-User gester noch eine gute Sache gepostet und meine Idee ist nun einfach das Power Reading, welches auch "running" triggert zu nutzen.
running reagiert auf power
total_temp könnte ich auch darauf triggern lassen wenn höher als swerta.
gang könnte ich triggern auf unter power unter swerta.

Schreibe später mal wie ich das im Code meine. Die Frage ist nur was besser ist. Mich würde echt mal interessieren wie andere das so lösen....zb. Ihr?
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 18 September 2019, 09:34:07
Hey nochmal... Habe einfach mal was getestet und jetzt verstehe ich NICHTS mehr!

running:power:.* {(ReadingsNum($name,"power",0) > ReadingsNum($name,"swerta",0)) ? 'true' : 'false' },
total_temp:power:.* {(ReadingsAge($name,"running",10) < '5') && (ReadingsNum($name,"power",0) > ReadingsNum($name,"swerta",0)) ? ReadingsNum($name,"total",0) : () },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) }


running triggert korrrekt (true / false) - War ja vorher auch so
total_temp wird berechnet und rein geschrieben - Ist kein schöner Code aber klappt
gang wird durch running getriggert. - ?????????

Wieso wird denn "gang" getriggert durch "running" wenn es eigentlich kein Event ist. Wenn "running" auf true geht, wird "total_temp" nicht getriggert. Das hatte ich verstanden da setreading kein Event erzeugt. Aber dann dürfte doch "gang" am Ende auch nicht getriggert werden?

EventMonitor:
2019-09-18 09:30:27 TPLinkHS110 s_trockner power: 100
2019-09-18 09:30:27 TPLinkHS110 s_trockner running: true
2019-09-18 09:30:27 TPLinkHS110 s_trockner total_temp: 4.054
2019-09-18 09:31:24 TPLinkHS110 s_trockner on_time: 66489
2019-09-18 09:31:24 TPLinkHS110 s_trockner current: 0.012786
2019-09-18 09:31:24 TPLinkHS110 s_trockner power: 0
2019-09-18 09:31:24 TPLinkHS110 s_trockner voltage: 237.309486
2019-09-18 09:31:24 TPLinkHS110 s_trockner running: false
2019-09-18 09:31:24 TPLinkHS110 s_trockner gang: 0


Das hier 0 rauß kommt, liegt natürlich an der nicht vorhandenen Differenz.... Aber es wird gesetzt!


Jetzt bin ich echt gespannt!
Titel: Antw:userReadings werden nicht gesetzt
Beitrag von: 87insane am 30 September 2019, 20:23:03
Abend zusammen...

nachdem wir alle nun so viele Infos zusammen getragen haben, will ich euch die letzte nicht vor enthalten. Kann es sein das die Reihenfolge innerhalb von userReadings sehr entscheidend ist?

Nachdem ich diese angepasst habe, geht es nämlich wie gewünscht. Ich habe das nun immer mal wieder angepasst und Dinge probiert. Am ende war es aber jedes mal so, wenn ich das Reading, was die anderen auslöst nach oben setze, ging es. Bei mqtt Geräten scheint das komplett egal zu sein aber hier nicht.

  running:power:.* {(ReadingsNum("$name","power",0) > ReadingsNum("$name","swerta",0)) ? 'true' : 'false' },
total_temp:running:.true { ReadingsNum("$name","total",0) },
gang:running:.false { ReadingsNum("$name","total",0) - ReadingsNum("$name","total_temp",0) }



Danke euch allen und ich hoffe es hilft ggf mal jemandem.