userreading's verschwinden von allein [Gelöst]

Begonnen von Guzzi-Charlie, 02 September 2022, 17:43:09

Vorheriges Thema - Nächstes Thema

Guzzi-Charlie

Hallo,

ich glaube ich brauche mal etwas grundsätzliche Hilfe. Irgendwie habe ich das userreading wohl grundsätzlich nicht verstanden.

Ich habe folgendes notify angelegt um meinen goe-charger zu steuern und den Ladestrom in Abhängigkeit von der PV-Leistung einzustellen:
defmod n_goE_charging notify Fenecon:.*|MQTT2_D1Mini_1F4628:.*|dy_pCounterValues:.* \
{\
my $AnzPha= (ReadingsNum("n_goE_charging","AnzPha",0));;;;\
my $AmpereMax= (ReadingsNum("n_goE_charging","AmpereMax",0)/$AnzPha);;;;\
my $AmpereSoll= (ReadingsNum("n_goE_charging","AmpereMax",0));;;;\
{if (($AmpereMax) >16) {$AmpereSoll =16}}\
{if ((($AmpereMax) >14) && ($AmpereMax) <16) {$AmpereSoll =14}}\
{if ((($AmpereMax) >12) && ($AmpereMax) <14) {$AmpereSoll =12}}\
{if ((($AmpereMax) >10) && ($AmpereMax) <12) {$AmpereSoll =10}}\
{if ((($AmpereMax) >8) && ($AmpereMax) <10) {$AmpereSoll =8}}\
{if ((($AmpereMax) >6) && ($AmpereMax) <8) {$AmpereSoll =6}}\
{if ((($AmpereMax) >0) && ($AmpereMax) <6) {$AmpereMax =0}}\
{if (ReadingsNum("MQTT2_go_eCharger","powerL2_W",0)>0)\
   {fhem("set n_goE_charging AnzPha 3")}\
  else\
   {fhem("set n_goE_charging AnzPha 1")}}\
{if ((($AmpereMax) >0) && (ReadingsNum("MQTT2_go_eCharger", "car", 0) > 0) && (ReadingsNum("Fenecon", "Batterie_Ladestand", 0) > 90))\
   {{fhem("set MQTT2_go_eCharger Activation 1")}\
    {fhem("setreading n_goE_charging Ampere $AmpereSoll")}\
    {fhem("set MQTT2_go_eCharger Ampere $AmpereSoll")}} \
else\
    {fhem("set MQTT2_go_eCharger Activation 0")}}\
}
attr n_goE_charging disable 0
attr n_goE_charging room 1
attr n_goE_charging userReadings AmpereMax {(round(((ReadingsNum("MQTT2_D1Mini_1F4628","SENSOR_ABB_Active_power_Total",0))\
+(ReadingsNum("Fenecon","EnergieerzeugungDC_W",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL1",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL2",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL3",0)))/\
((ReadingsNum("MQTT2_D1Mini_1F4628","SENSOR_ABB_Voltage_L1",0)+\
ReadingsNum("MQTT2_D1Mini_1F4628","SENSOR_ABB_Voltage_L2",0)+\
ReadingsNum("MQTT2_D1Mini_1F4628","SENSOR_ABB_Voltage_L3",0))/3),0))},\
LadeLeistSoll {(round(((ReadingsNum("MQTT2_D1Mini_1F4628","SENSOR_ABB_Active_power_Total",0))\
+(ReadingsNum("Fenecon","EnergieerzeugungDC_W",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL1",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL2",0))\
-(ReadingsNum("dy_pCounterValues","pNotstromOutL3",0))),0))},\
AnzPha {3}


Das notify funktioniert soweit auch, aber die Readings der "userreadings" verschwinden irgendwann von allein und dann funktioniert das ganze Konstrukt nicht mehr. Wieso verschwinden die Reading denn von allein? Wenn ich die Readings manuell per set-Befehl wieder aktiviere, dann funktioniert es wieder.

Was mache ich denn falsch, bzw. geht das überhaupt so wie ich es gebaut habe?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

betateilchen

Du hast auf jeden Fall gefühlt 728 geschweifte Klammern völlig sinnlos verwendet.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Guzzi-Charlie

- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

betateilchen

Naja, die Antwort war wirklich ernst gemeint. Fang doch mal an, auszumisten und eine korrekte perl-Syntax zu verwenden. Vielleicht löst das schon Dein Problem.

Dein Code-Gefrickel ist sowas von unübersichtlich und chaotisch, dass ich mir das erstmal in einen ordentlichen Editor kopieren müsste, um zu verstehen, was Du da eigentlich tun willst. Und dazu habe ich im Moment weder die Zeit noch die technische Möglichkeit, weil ich gerade unterwegs bin.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

frank

sind die readings nach fhem restart weg?
sind sie im file fhem.save?
hast du sie gespeichert?
FHEM: 6.0(SVN) => Pi3(buster)
IO: CUL433|CUL868|HMLAN|HMUSB2|HMUART
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500
WebUI [HMdeviceTools.js (hm.js)]: https://forum.fhem.de/index.php/topic,106959.0.html

Guzzi-Charlie

Die Readings werden ja durch den Eintrag der userreadings, bzw. durch mein setreading... angelegt und durch die Formeln im notify mit Werten gefüllt. Die Config ist natürlich immer gespeichert. Mit einem FHEM Restart hat das nichts zu tun. Wie ich das sehe verschwinden die einfach im laufenden Betrieb. Das file fhem.save ist leer. Das enthält nur eine Zeile, das Datum von Gestern.

#Thu Sep  1 23:59:59 2022


Ich hab da nicht genau hingeschaut, aber das notify hat normal gearbeitet, den goe-charger gesteuert und das Auto (fertig) geladen. Irgendwann danach sind die Readings dann wohl verschwunden. Ob das einen Zusammenhang hat weiß ich nicht. Einen Neustart gab es nicht.

Wie gesagt verstehe ich, glaube ich, den Zusammenhang zwischen dem Anlegen der Readings (per userreading) und dem "Füllen" derselben wohl nicht richtig. Wenn ich ein Reading manuell mit setreading... anlege und es als userreading definiert ist, dann sollte es doch Bestand haben, oder nicht. Wie kann das einfach verschwinden?
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

betateilchen

Zitat von: Guzzi-Charlie am 02 September 2022, 20:01:26
Die Config ist natürlich immer gespeichert. Mit einem FHEM Restart hat das nichts zu tun. Wie ich das sehe verschwinden die einfach im laufenden Betrieb. Das file fhem.save ist leer. Das enthält nur eine Zeile, das Datum von Gestern.

Wenn Du ein reading (egal wie) erzeugst und mit einem Wert füllst, dann existiert das reading erstmal ausschließlich in der laufenden FHEM Instanz (im Speicher).
Erst durch das Abspeichern (save config) wird das statefile geschrieben, dann werden auch alle zu diesem Zeitpunkt vorhandenen readings dauerhaft gespeichert.

Zitat von: Guzzi-Charlie am 02 September 2022, 20:01:26
Wie ich das sehe verschwinden die einfach im laufenden Betrieb.

Readings verschwinden nicht einfach im laufenden Betrieb. Entweder, das Gerätemodul löscht in den den von ihm angelegten devices alle readings, um selbst neue readings zu schreiben, oder im laufenden Betrieb ist ein restart passiert und das statefile mit den readings war noch nicht abgespeichert.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Guzzi-Charlie

Zitat... dann werden auch alle zu diesem Zeitpunkt vorhandenen readings dauerhaft gespeichert.
Offensichtlich nicht. Save config mache ich IMMER direkt nach Änderungen. Einen unbemerkten Neustart kann ich zwar nicht ausschließen, aber der sollte ja keine Auswirkungen haben wenn es schon gespeichert war, oder?

Wo kann ich denn nachschauen ob die Readings tatsächlich gespeichert sind?

Wird ein Reading eigentlich überhaupt allein durch das Setzen eines userreadings angelegt, bzw. funktionieren die Formeln (z.B. die in meinem notify) überhaupt wenn die Readings nicht da sind? Ich hatte den Eindruck, daß das ganze notify erst anfing zu arbeiten nachdem ich die Readings manuell per "setreading..." (wieder) angelegt hatte.

Ich werde die Readings nun nochmal manuell anlegen und schauen was passiert.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

KölnSolar

#8
setreading ist kein userReadings ! Es steht nicht in der config, sondern nur im state(save)-file.
Edit: nur nach WriteStatefile oder sauberem shutdown
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt

Beta-User

Sollte man nicht Popcorn machen?

Per userReading erzeugt man erst Code, der bei einem passenden (! so man trigger verwendet!) Event ausgeführt wird. Steht da (im auszuführenden Code) "Mist" drin, müßte eigentlich (nach einem passenden Event) was im Log zu finden sein, und ich würde stark darauf tippen, dass wir dann wieder bei der Klammersetzung landen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

betateilchen

Diese Beratungsresistenz ist unglaublich...
Ich bin hier raus. Ohne Popcorn.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Guzzi-Charlie

Entschuldigung daß ich unter "Anfängerfragen" dumme Fragen gestellt habe und mir Hilfe erhofft hatte, aber die FHEM-Gurus scheinen ihr Wissen lieber für sich zu behalten.

Und auf blöde Kommentare kann ich auch gerne verzichten!

Falls sich doch noch Jemand berufen fühlen sollte mir konstruktiv zu helfen, dann gerne. Ansonsten (falls hier ein Mod zufällig den Beitrag ließt) kann der Beitrag komplett gelöscht werden. Danke.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2

MadMax-FHEM

Du hast es vielleicht nicht verstanden/verstehen wollen (trifft es wohl eher) aber dir wurde doch bereits geholfen (in Bezug auf deine gelieferten Infos).

Du frägst nach Problemen mit userReadings aber es ist nichts an Infos zu userReadings zu finden.

Daher der korrekte Hinweis, dass das was du gezeigt hast eben NICHTS mit userReadings zu tun hat.
Und an dem was du gezeigt hast eben einiges "schräg" ist bzw. verbessert werden kann...

Statt das anzunehmen, hast du rumgetönt ;)

Das hier beachtet: https://forum.fhem.de/index.php/topic,71806.0.html

Wo sind z.B. lists der beteiligten Devices? Also dort wo die Readings (vermeintliche userReadings) drin sein sollen und dann einfach verschwinden?
Logauszüge, um vielleicht doch unerwartete Neustarts zu sehen oder andere Auffälligkeiten...

Wenn im state-file NICHTS drin steht, dann ist doch u.U. generell was faul?
Oder hast du KEINE Devices mit Werten/Readings?

Also einfach mal ein wenig die Antworten beachten und "aufräumen", mal bei userReadings nachlesen und v.a. weitere Infos liefern...
...oder halt dann doch lassen.

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

DetlefR

Wenn ich deinen Code richtig gelesen habe, dann sollen die userReadings auf dem Notify angelegt werden. Habe ich bisher noch nicht gesehen.
Und das hat auch einen Grund. userReadings werden angelegt/aktualisiert wenn sich auf dem Gerät wo es angelegt ist ein Reading ändert und einen Event erzeugt. Das ist bei einem Notify äußerst selten.
Berechne doch "AmpereMax" und "LadeLeistSoll" im Notify und speichere es mit "fhem("setreading ...") in einem der drei Geräte oder zur Not in einem separatem Dummy.

Ansonsten, bei der Verwendung von geschweiften Klammern bist du wirklich sehr großzügig.  ;)
Und mach dich mal mit "elsif" vertraut. Das würde die vielen "if " sehr vereinfachen.

Guzzi-Charlie

Ich habe natürlich schon intensiv (Heute den halben Tag) im Forum und vielen Beiträgen nach möglichen Ursachen gesucht bevor ich den Beitrag verfaßt habe. Ich hatte aber leider nichts gefunden.

...aber dir wurde doch bereits geholfen (in Bezug auf deine gelieferten Infos).
womit wurde mir geholfen?

ZitatDu frägst nach Problemen mit userReadings aber es ist nichts an Infos zu userReadings zu finden.
Daher der korrekte Hinweis, dass das was du gezeigt hast eben NICHTS mit userReadings zu tun hat.
Ich habe doch das komplette Listing des notifys um das es geht gepostet. Es geht genau um die userReadings dieses notify's. Verstehe den Einwand nicht.

ZitatUnd an dem was du gezeigt hast eben einiges "schräg" ist bzw. verbessert werden kann...
Das mag ja sein, aber Niemand sagt was da (wenn überhaupt) falsch sein soll. Vielleicht sind da ein paar Klammern zuviel und man könnte das viel schöner machen, aber es funktioniert. Ich weiß es halt nicht besser.

ZitatStatt das anzunehmen, hast du rumgetönt
Im Gegensatz zu einigen Antworten waren meine Fragen immer höflich, bis auf die letzte natürlich. Wozu frage ich denn nach Hilfe, wenn es am Ende nur dumme Sprüche gibt.

ZitatWo sind z.B. lists der beteiligten Devices? Also dort wo die Readings (vermeintliche userReadings) drin sein sollen und dann einfach verschwinden?
Wie oben schon geschrieben habe ich das list des betroffenen devices (notify) schon mit der Eröffnung des Beitrages gepostet.

ZitatWenn im state-file NICHTS drin steht, dann ist doch u.U. generell was faul?
Das hat mich natürlich auch stutzig gemacht. Da hab ich noch nie reingeschaut. Dazu habe ich aber jetzt etwas festgestellt was eigentlich nicht so sein sollte, denke ich.
Wenn ich in der FHEM-Oberfläche "Save config" anstoße, dann wird das statefile "fhem.save" bis auf die erste Zeile mit dem Datum geleert.
Wenn ich das statefile mit {WriteStatefile()} manuell schreibe, dann wird die Datei gefüllt (auch die userReadings um die es hier geht werden mit gesichert, nachdem ich sie aber vorher per "setreading" wieder angelegt hatte).

In der CommandRef zu "save" steht:
ZitatSichert zuerst das statefile und dann das configfile.
Warum das nicht so ist weiß ich noch nicht.

Wenn mit Save config das statefile nicht nur nicht geschrieben, sondern sogar "gelöscht" wird, dann kann natürlich auch kein Reading/keine Variable überleben. Warum das so ist habe ich noch nicht herausgefunden.

ZitatOder hast du KEINE Devices mit Werten/Readings?
Natürlich habe ich devices, sehr viele sogar, über 200, aber es geht ja nur um das o.g. notify.

ZitatAlso einfach mal ein wenig die Antworten beachten und "aufräumen"
Welche Antworten soll ich denn beachten und was soll ich denn "aufräumen"? Es gab dazu keinerlei konkrete Hinweise.

Ich hätte mir halt konkrete Hilfestellungen, bzw. Hinweise gewünscht wo ich suchen soll und nicht nur blöde Kommentare. Darauf kann ich wirklich verzichten. Wenn Jemand nicht helfen will, oder sich für was Besseres hält, dann soll Derjenige doch einfach die Finger von den Tasten lassen.
- RasPi 5: Cuno-V2 -2x KS300,JeeLink -13x EC3000
- Stromzähler: 6x SDM120M,9x XTM100A,38x DRS110M,3x eHz
- LAN: IT-GW 34x RMF-R1(Roll-Mot.),- 1x Loxone MSgo
- WLAN: 89x Shelly,12x Gosund SP111,16x D1-Mini,15x Sonoff Basic,85x 1wire T-Sens.
- DECT: 6x DECT200,11x DECT301,-HmIP: 3x FalmotC12,16x WTH2