userReadings mit Hilfe von ReadingsVal und {return} im Wert verändern

Begonnen von cocojambo, 16 August 2018, 19:55:09

Vorheriges Thema - Nächstes Thema

cocojambo

Ich weiß nicht ob ich die Überschrift richtig gewählt habe, aber ich konnte es nicht besser beschreiben.

Ich habe eine SolarEdge Photovoltaikanlage mit Batteriespeicher. Um den Zustand der Batterie mitzubekommen, gibt diese über den Modbus 7 verschiedene Stati in Form von Ziffern aus (0-6). Ich möchte aber diesen Werten feste Begriffe zuordnen. (z.B. 3=entladen, 4= laden, 6= Erhatungsladen, etc.) um sie später in einer Tabelle aufzulisten.

Folgendes habe ich bereits gemacht:

attr mySL_now userReadings Batt_State {if (ReadingsVal("SolarEdge", "Batt_State", "4")) {return 'laden'}}

Das funktioniert aber nicht. In der Tabelle erscheint weiterhin die "4". Das wollte ich dann weiter für die anderen Werte machen.
Hat jemand eine Idee was ich da falsch mache? oder läßt sich das anders und eleganter lösen?

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Otto123

Hallo Norbert,

if (ReadingsVal("SolarEdge", "Batt_State", "4")) musste wahr werden damit 'laden' zurück kommt.

Was ergibt denn {ReadingsVal("SolarEdge", "Batt_State", "4")}in der FHEM Kommandozeile?
if (ReadingsNum("SolarEdge", "Batt_State", "4")) == 4 {return 'laden'}Könnte sein was Du willst, aber was ist wenn anders als 4 ?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

dafex

{if (ReadingsVal("SolarEdge", "Batt_State", "4")) {return 'laden'}}
Deine Abfrage prüft ob der Batt_State {return 'laden'} ist. Ist er natürlich nicht. Darum wird die 4 ausgegeben, wie du es vorgegeben hast.

Probier mal das:
{ReadingsVal("SolarEdge", "Batt_State", "undef") == 4 ? "laden" : "nix" } Wenn du das oben in die Kommandozeile eingibts, wird die 4 zurückgeben wenn der aktuelle Staus auch 4 ist. Ansonsten "nix".

Wenn das funktioniert eine etwas unelegante Methode, aber ich kanns nicht besser:
attr mySL_now userReadings Batt_State {
  ReadingsVal("SolarEdge", "Batt_State", "undef") == 4 ? "laden" :
  ReadingsVal("SolarEdge", "Batt_State", "undef") == 3 ? "entladen" :
  ReadingsVal("SolarEdge", "Batt_State", "undef") == 6 ? "Erhaltungsladen" : "Fehler"
}
Deine restlichen Stati einfach in der gleichen Weise dranhängen.


Otto123

Zitat von: dafex am 16 August 2018, 22:08:33
{if (ReadingsVal("SolarEdge", "Batt_State", "4")) {return 'laden'}}
Deine Abfrage prüft ob der Batt_State {return 'laden'} ist. Ist er natürlich nicht. Darum wird die 4 ausgegeben, wie du es vorgegeben hast.
Nö! Er prüft ob ob ReadingsVal("SolarEdge", "Batt_State", "4") wahr ist und wenn ja gibt er {return 'laden'} zurück.

if (Bedingung) {Wenn wahr dann gib das zurück}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Wzut

Zitat von: cocojambo am 16 August 2018, 19:55:09
oder läßt sich das anders und eleganter lösen?
Klar :) und vermutlich wird es ja nicht nur bei der Übersetzung der Nr 4 bleiben ?
Daher würde ich gleich Nägel mit Köpfen machen und eine komplette Tabelle anlegen für jeden Status (0-6) plus einem mehr für unbekannt

attr mySL_now userReadings Batt_State { my @a=("0"=>"Text1","1"=>"Text2","2"=>"Text2","3"=>"laden","4"=>"entladen","5"=>"Text5","6"=>"Text6","7"=>"???"); my $v=int(ReadingsNum("SolarEdge", "Batt_State", 7)); return $a[$v];}

Text1..6 musst du halt durch deine Statustexte ersetzen
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

cocojambo

@ dafex
@ Otto123

Naja, das stimmt, aber wenn man verzweifelt nach allen möglichen Programmiernöglichkeiten sucht und dann meint man hätte was gefunden, guckt man auch nicht mehr so genau wo der Gedankenfehler liegt. Ich hätte vieleicht probieren sollen die Formel "rumzudrehen".

@Wzut

Deine Lösung ist elegant und hat den Vorteil, das man alles in einer Zeile abtun kann. Es tut mir aber leid, diese Lösung bringt folgende Error Meldung:

Unknown command my, try help. Unknown command return, try help.

Ich habe auch auf Anhieb nicht gesehen was an "return" falsch, vielleicht hören irgendwo noch ein paar Klammern hin.

Gruß aus Köln
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Otto123

Hallo Norbert,

der Code ist für die DEF, ich hoffe Du hast ihn im DEF Editor eingetragen. Ansonsten musst du aus ; -> ;; machen!

Zitat von: cocojambo am 17 August 2018, 15:28:25
@ Otto123

Naja, das stimmt, aber wenn man verzweifelt nach allen möglichen Programmiernöglichkeiten sucht und dann meint man hätte was gefunden, guckt man auch nicht mehr so genau wo der Gedankenfehler liegt. Ich hätte vieleicht probieren sollen die Formel "rumzudrehen".
Welche Formel meinst Du? Bei Dir war keine Formel, da war nur ein ReadingsVal  :-[ wie wolltest Du den rumdrehen? Du meinst das if nachgestellt? Ändert nichts an der falschen Bedingung!

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cocojambo

Das mit der "Formel" war falsch ausgedrückt. Aber wenn du schreibst: wenn "4" wahr ist, gibt return "laden" zurück, dann hätte es ja funktionieren müssen - tat es aber nicht. "4" war wahr und es kam "4" zurück.
dafex schrieb aber, es wird geprüft ob der zustand "laden" ist und wenn nicht, gibt es "4" zurück. Deshalb dachte ich, wenn die Abfrage nach "laden" führt, müßte man auch mit "if" nach dem Zustand "laden" fragen und nicht nach "4". Das meinte ich mit vertauschen.

Das mit dem "DEF EDITOR" habe ich noch nie vermisst und auch nie angewendet. Die Wiki Erlärungen habe ich mir mal angesehen. Aber so wie ich das verstanden habe, würden dann alle in der cfg vorkommenden ";" angepasst, und das gäbe ein Kaos. Deshalb habe ich mich entschlossen lieber aus ";" zwei zu machen.
Die Error Meldung ist zwar dann weg, aber die "6" im Batt_State Reading die im Moment für Erhaltungsladen steht, steht weiterhin drin.

Gruß
Nobbi
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

Wzut

poste doch bitte mal list (in CodeTags) von deinem mySL_now und SolarEdge
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

CoolTux

Hilft das hier Dir um zu erkennen wie es gehen kann?


fs_rootFree:fs_root:.* { if( (split(' ',ReadingsVal($name,'fs_root',0)))[6] > 90) {'red'}
                        elsif( (split(' ',ReadingsVal($name,'fs_root',0)))[6] > 85) {'pink'}
                        elsif( (split(' ',ReadingsVal($name,'fs_root',0)))[6] > 75) {'yellow'}
                        elsif( (split(' ',ReadingsVal($name,'fs_root',0)))[6] > 0) {'green'} }
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

Otto123

Hi,

Zitat"4" war wahr und es kam "4" zurück.
4 ist nicht wahr, denn 4 ist kein logischer Ausdruck!
4=4 wäre ein logischer Ausdruck und wäre wahr! Ich habe gesagt ich weiß nicht welches logische Ergebnis  "4" liefert. Aber wahrscheinlich wird alles ungleich null als wahr interpretiert.
Probier folgendes aus, aber die FHEM Kommandozeile kennst Du wahrscheinlich auch nicht:  :'(
{if ("4") {return 'wahr'} else {return 'falsch'}}

Ansonsten kann ich nicht weiter helfen,

Viel Erfolg
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

cocojambo

@ Otto123

Das ist nicht sehr nett. Es können nicht alle so gut wie du sein, es gibt auch Leute, die sich mit viel Zeitaufwand und "Learning by doing" an FHEM gesetzt haben und von NULL angefangen haben. SO WIE ICH. Ich lese mir jeden Beitrag und Anleitung in z.B. Wiki durch, gucke mir andere Programme an und versuche zu entschlüsseln und zu verstehen wie sie funktionieren und dabei kapiere ich eben nicht alles. Und deshalb frage ich dann hier im Board, teilweise unter Anfängerfragen.
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

cocojambo

Hier die Readings von SolarEdge:
READINGS:
     2018-07-27 10:54:20   AC-Energy-Scale 0
     2018-07-27 10:54:20   AC-Energy-Val   57730
     2018-07-27 10:54:20   AC-Power-Scale  -2
     2018-07-27 10:54:20   AC-Power-Val    60264
     2018-07-27 11:47:22   Batt_           State 6
     2018-08-15 11:31:11   Batt_Amp        0.00
     2018-07-27 11:42:06   Batt_Average_Temp 28.70
     2018-07-27 11:42:06   Batt_Curr       0.00
     2018-08-17 17:07:02   Batt_Fill       100.00
     2018-08-15 11:28:22   Batt_Health     100.00
     2018-08-17 17:07:02   Batt_In_Count   5568
     2018-07-27 12:12:00   Batt_Input_Counter 139
     2018-08-17 17:07:02   Batt_Out_Count  243
     2018-07-27 12:12:00   Batt_Output_Counter 0
     2018-07-27 11:42:07   Batt_Pow        0
     2018-08-17 17:07:02   Batt_State      6
     2018-08-17 17:07:02   Batt_Temp       26.80
     2018-07-27 11:42:06   Batt_Vol        424.90
     2018-08-15 11:31:11   Batt_Volt       424.00
     2018-08-17 17:07:02   Batt_Watt       0
     2018-07-27 11:38:28   Batterie        Gesundheitszustand 100
     2018-07-27 10:54:20   DC-Current-Scale -6
     2018-07-27 10:54:20   DC-Current-Val  53181
     2018-07-27 10:54:21   DC-Power-Scale  -3
     2018-07-27 10:54:21   DC-Power-Val    55295
     2018-07-27 10:54:21   DC-Voltage-Scale -1
     2018-07-27 10:54:21   DC-Voltage-Val  4232
     2018-07-27 10:54:21   HeatSinkTemp    4636
     2018-07-27 10:54:21   Inverter        Status 4
     2018-07-25 11:01:43   Status          4
     2018-07-27 11:38:27   durch.Batterie  Temperatur 28.70
     2018-07-27 11:00:24   max.Batterie    Temperatur_57710 0
     2018-08-17 16:06:44   state           opened
   defptr:
     1:
   gotReadings:
     Batt_Fill  100.00
     Batt_In_Count 5568
     Batt_Out_Count 243
     Batt_State 6
     Batt_Temp  26.80
     Batt_Watt  0


und hier von mySL_now:

READINGS:
     2018-08-17 17:11:34   Batt_State      3
     2018-08-17 17:11:34   Co2_all         46471228.3
     2018-08-17 17:11:34   Pac_Day         20030
     2018-08-17 17:11:34   Pac_Day_avg     19883
     2018-08-17 17:11:34   Pac_Mon         696670
     2018-08-17 17:11:34   Pac_Mon_avg     696523
     2018-08-17 17:11:34   Pac_S0_now      3093
     2018-08-17 17:11:34   Pac_S0_now_avg  3549
     2018-08-17 17:11:34   Pac_Year        7283488
     2018-08-17 17:11:34   Pac_Year_avg    7283341
     2018-08-17 17:11:34   Pac_all         66387469
     2018-08-17 17:11:34   Pac_all_avg     66387322
     2018-08-17 17:11:34   Pac_now         3537
     2018-08-17 17:11:34   Pac_now_avg     4034
     2018-08-17 17:11:34   S0_Day          5947
     2018-08-17 17:11:34   S0_Day_avg      5931
     2018-08-17 17:11:34   S0_Mon          99057
     2018-08-17 17:11:34   S0_Mon_avg      99041
     2018-08-17 17:11:34   S0_Pac_now      0
     2018-08-17 17:11:34   S0_Year         2430876
     2018-08-17 17:11:34   S0_Year_avg     2430860
     2018-08-17 17:11:34   S0_all          31589053
     2018-08-17 17:11:34   S0_all_avg      31589037
     2018-08-17 17:11:34   S0_now          444
     2018-08-17 17:11:34   S0_now_avg      485
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

CoolTux

Wo ist denn da jetzt das Problem


mySL_now userReadings BattStateHuman:Batt_State:.* { if( ReadingsVal($name, "Batt_State", "-1") == 4 ) {  'laden'  }
                 elsif( ReadingsVal($name, "Batt_State", "-1") == 6 ) {  'Erhatungsladen'  }
                 elsif(  ReadingsVal($name, "Batt_State", "-1") ==  3 ) {  'enladen'  }
}
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

Otto123

Zitat von: cocojambo am 17 August 2018, 17:04:16
... es gibt auch Leute, die sich mit viel Zeitaufwand und "Learning by doing" an FHEM gesetzt haben und von NULL angefangen haben.
so wie ich  :D

Sorry, ich wollte nicht "nicht nett" rüberkommen. Ich wollte nur meiner Verzweiflung über Deine Worte zum DEF Editor und des direkten Editierens der fhem.cfg Ausdruck verleihen.  ;)
Nach meiner Erfahrung meiden fhemcfgdirekteditierer auch die FHEM Kommandozeile in der WEB Oberfläche, denn sie meiden die WEB Oberfläche.

Nichts für ungut
Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz