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
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
{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.
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
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
@ 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
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
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
poste doch bitte mal list (in CodeTags) von deinem mySL_now und SolarEdge
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'} }
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
@ 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.
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
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' }
}
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
@CoolTux
ich habe mal deinen Vorschlag eingebaut. Keine Fehlermeldung, leider aber auch kein Erfolg.
mySL_now userReadings BattStateHuman:Batt_State:.* { if( ReadingsVal($name, "Batt_State", "-1") == 4 ) { 'laden' }
elsif( ReadingsVal($name, "Batt_State", "-1") == 6 ) { 'Erhaltungsladen' }
elsif( ReadingsVal($name, "Batt_State", "-1") == 3 ) { 'entladen' }}
Ich habe $name auch mal durch SolarEdge ersetzt, ändert nix.
Gruß
Nobbi
Würde denn das Reading Batt_State aktualisiert? Gibt es einen Event sollte das Reading Batt_State aktualisiert werden?
Dein list ist Kacke weil die Hälfte fehlt. Wir wissen ja nicht mal ob Du event-on- verwendest oder nicht.
Was sagt der Eventmonitor?
Hier der EventMonitor für SolarEdge, wird alle 30sek aktuallisiert:
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Temp: 26.50
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Watt: -325
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Out_Count: 196
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_In_Count: 302
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Fill: 100.00
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_State: 4
Das sind alle Werte, die ich zur Zeit aus der Batterie auslese.
Gruß
Nobbi
Zitat von: CoolTux am 17 August 2018, 18:15:40
Dein list ist Kacke weil die Hälfte fehlt.
eso es :) uns solange da nicht das gewünschte kommt bin ich still .....
Zitat von: cocojambo am 17 August 2018, 19:15:55
Hier der EventMonitor für SolarEdge, wird alle 30sek aktuallisiert:
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Temp: 26.50
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Watt: -325
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Out_Count: 196
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_In_Count: 302
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_Fill: 100.00
2018-08-17 19:12:56 ModbusAttr SolarEdge Batt_State: 4
Das sind alle Werte, die ich zur Zeit aus der Batterie auslese.
Gruß
Nobbi
OK und hast du das userReadings Beispiel von mir entsprechend an SolarEdge angepasst?
Poste bitte ein komplettes list von SolarEdge
Hier das komplette list SolarEdge
Save config
Dashboard
Floorplans
Bad 1.Etage
Bad EG
Büro 1.Etage
Diele 2.Etage
Garten
Heizungsraum
Kamera
Küche
Partyraum
Schlafzimmer
System
Töpferei
Unsorted
Waschküche
Werkstatt
Wohnzimmer
Everything
Logfile
Commandref
Edit files
Event monitor
Neustart
Edit Fhem
Update
UpdateCheck
Internals:
BUSY 0
DEF 1 30 192.168.115.3:502 TCP
DEST 192.168.115.3:502
DeviceName 192.168.115.3:502
FD 35
INTERVAL 30
IODev SolarEdge
LASTOPEN 1534526954.1581
MODBUSID 1
ModuleVersion 3.7.3 - 22.12.2017
NAME SolarEdge
NOTIFYDEV global
NR 1280
NTFY_ORDER 50-SolarEdge
PARTIAL
PROTOCOL TCP
REQUESTHEX 0090000000060103e16c001b
STATE opened
TRIGGERTIME 1534527465.41654
TRIGGERTIME_FMT 2018-08-17 19:37:45
TYPE ModbusAttr
devioLoglevel 4
nextOpenDelay 60
QUEUE:
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 19:37:15 Batt_Fill 97.99
2018-08-15 11:28:22 Batt_Health 100.00
2018-08-17 19:37:15 Batt_In_Count 302
2018-07-27 12:12:00 Batt_Input_Counter 139
2018-08-17 19:37:15 Batt_Out_Count 325
2018-07-27 12:12:00 Batt_Output_Counter 0
2018-07-27 11:42:07 Batt_Pow 0
2018-08-17 19:37:15 Batt_State 4
2018-08-17 19:37:15 Batt_Temp 26.50
2018-07-27 11:42:06 Batt_Vol 424.90
2018-08-15 11:31:11 Batt_Volt 424.00
2018-08-17 19:37:15 Batt_Watt -339
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 19:29:14 state opened
defptr:
1:
gotReadings:
Batt_Fill 97.99
Batt_In_Count 302
Batt_Out_Count 325
Batt_State 4
Batt_Temp 26.50
Batt_Watt -339
helper:
buffer
lid 1
lrecv 1534527435.43611
lsend 1534527435.42637
lastRead:
h57708 1534527435.43916
h57716 1534527435.44194
h57718 1534527435.44387
h57722 1534527435.44575
h57732 1534527435.44864
h57734 1534527435.4507
Attributes:
dev-h-combine 200
dev-h-defPoll 1
dev-h-defShowGet 1
enableControlSet 1
maxTimeoutsToReconnect 3
obj-h57708-bswapRegs 1
obj-h57708-expr sprintf "%.2f" ,$val
obj-h57708-len 2
obj-h57708-reading Batt_Temp
obj-h57708-unpack f
obj-h57716-bswapRegs 1
obj-h57716-len 2
obj-h57716-reading Batt_Watt
obj-h57716-unpack f
obj-h57718-len 4
obj-h57718-reading Batt_Out_Count
obj-h57718-unpack s>
obj-h57722-len 4
obj-h57722-reading Batt_In_Count
obj-h57722-unpack s>
obj-h57732-bswapRegs 1
obj-h57732-expr sprintf "%.2f" ,$val
obj-h57732-len 2
obj-h57732-reading Batt_Fill
obj-h57732-unpack f
obj-h57734-reading Batt_State
obj-h57734-unpack s>
silentReconnect 1
sortUpdate 1
userattr dev-h-combine dev-h-defPoll dev-h-defShowGet enableControlSet event-on-change-reading maxTimeoutsToReconnect obj-h40083-reading obj-h40083-unpack obj-h40084-reading obj-h40084-unpack obj-h40093-len obj-h40093-reading obj-h40093-unpack obj-h40095-reading obj-h40095-unpack obj-h40096-reading obj-h40096-unpack obj-h40097-reading obj-h40097-unpack obj-h40098-reading obj-h40098-unpack obj-h40099-reading obj-h40099-unpack obj-h40100-reading obj-h40100-unpack obj-h40101-reading obj-h40101-unpack obj-h40103-reading obj-h40103-unpack obj-h40107-reading obj-h40107-unpack obj-h57708-bswapRegs obj-h57708-expr obj-h57708-len obj-h57708-reading obj-h57708-unpack obj-h57710-bswapRegs obj-h57710-expr obj-h57710-len obj-h57710-reading obj-h57710-unpack obj-h57712-bswapRegs obj-h57712-expr obj-h57712-len obj-h57712-reading obj-h57712-unpack obj-h57714-bswapRegs obj-h57714-expr obj-h57714-len obj-h57714-reading obj-h57714-unpack obj-h57716-bswapRegs obj-h57716-expr obj-h57716-len obj-h57716-reading obj-h57716-unpack obj-h57718-len obj-h57718-reading obj-h57718-unpack obj-h57722-len obj-h57722-reading obj-h57722-unpack obj-h57726-bswapRegs obj-h57726-expr obj-h57726-len obj-h57726-reading obj-h57726-unpack obj-h57728-bswapRegs obj-h57728-expr obj-h57728-len obj-h57728-reading obj-h57728-unpack obj-h57730-bswapRegs obj-h57730-expr obj-h57730-len obj-h57730-reading obj-h57730-unpack obj-h57732-bswapRegs obj-h57732-expr obj-h57732-len obj-h57732-reading obj-h57732-unpack obj-h57733-bswapRegs obj-h57733-expr obj-h57733-len obj-h57733-reading obj-h57733-unpack obj-h57734-len obj-h57734-reading obj-h57734-unpack silentReconnect sortUpdate
Gruß
Nobbi
Und wo ist da das userReadings? Wie soll da was kommen wenn du es nicht setzt.
will er ja gar nicht da haben sondern in mySL_now und da fehlt halt das list ....
Hätte schon erwartet daß er mir ein list von dem Device gibt wo er das userReading hat.
Bisschen Kopfweh ich hab.
und hier das list von mySL_now
Internals:
DEF 192.168.115.2 30
HOST 192.168.115.2
INTERVAL 30
NAME mySL_now
NR 769
STATE active
TYPE Solarlog
READINGS:
2018-08-17 20:11:18 Batt_State Error evaluating mySL_now userReading Batt_State: Can't modify non-lvalue subroutine call in scalar assignment at (eval 160512) line 1, near "6 ) "
2018-08-17 20:00:39 Co2_all 46473113.4
2018-08-17 20:34:04 Pac_Day 22793
2018-08-17 20:34:04 Pac_Day_avg 22790
2018-08-17 20:34:04 Pac_Mon 699433
2018-08-17 20:34:04 Pac_Mon_avg 699430
2018-08-17 20:00:39 Pac_S0_now 0
2018-08-17 20:00:39 Pac_S0_now_avg -548
2018-08-17 20:34:04 Pac_Year 7286251
2018-08-17 20:34:04 Pac_Year_avg 7286248
2018-08-17 20:34:04 Pac_all 66390232
2018-08-17 20:34:04 Pac_all_avg 66390229
2018-08-17 20:34:04 Pac_now 81
2018-08-17 20:34:04 Pac_now_avg 85
2018-08-17 20:34:04 S0_Day 8628
2018-08-17 20:34:04 S0_Day_avg 8601
2018-08-17 20:34:04 S0_Mon 101738
2018-08-17 20:34:04 S0_Mon_avg 101711
2018-08-17 20:00:39 S0_Pac_now 30
2018-08-17 20:34:04 S0_Year 2433557
2018-08-17 20:34:04 S0_Year_avg 2433530
2018-08-17 20:34:04 S0_all 31591734
2018-08-17 20:34:04 S0_all_avg 31591707
2018-08-17 20:34:04 S0_now 640
2018-08-17 20:34:04 S0_now_avg 587
Attributes:
avg_count 10
register 3502,Pac_now,3518,S0_now,3520,S0_Day,3524,S0_Mon,3526,S0_Year,3516,Pac_all,3508,Pac_Day,3512,Pac_Mon,3514,Pac_Year,3528,S0_all
userReadings BattStateHuman:Batt_State:.* { if( ReadingsVal($name, "Batt_State", -1) == 4 ) { 'laden' } elsif( ReadingsVal($name, "Batt_State", "-1") = 6 ) { 'Erhaltungsladen' } elsif( ReadingsVal($name, "Batt_State", "-1") = 3 ) { 'entladen' }}
Gruß
Nobbi
"-1") = 6 )
Das muss == heißen. Bitte genau abschreiben. Korrigiere die anderen bitte auch gleich.
Ja, nachdem ich das list eingestellt hatte, habe ich die Fehlermeldung gesehen und alles noch mal neu kopiert und wieder eingefügt.
Ergbniss= die selbe Fehlermeldung.
attr 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' }}
Gruß
Nobbi
Achso , hier das List nach der Korrektur:
Internals:
DEF 192.168.115.2 30
HOST 192.168.115.2
INTERVAL 30
NAME mySL_now
NR 769
STATE active
TYPE Solarlog
READINGS:
2018-08-17 20:11:18 Batt_State Error evaluating mySL_now userReading Batt_State: Can't modify non-lvalue subroutine call in scalar assignment at (eval 160512) line 1, near "6 ) "
2018-08-17 20:00:39 Co2_all 46473113.4
2018-08-17 20:54:32 Pac_Day 22795
2018-08-17 20:54:32 Pac_Day_avg 22795
2018-08-17 20:54:32 Pac_Mon 699435
2018-08-17 20:54:32 Pac_Mon_avg 699435
2018-08-17 20:00:39 Pac_S0_now 0
2018-08-17 20:00:39 Pac_S0_now_avg -548
2018-08-17 20:54:32 Pac_Year 7286253
2018-08-17 20:54:32 Pac_Year_avg 7286253
2018-08-17 20:54:32 Pac_all 66390234
2018-08-17 20:54:32 Pac_all_avg 66390234
2018-08-17 20:54:32 Pac_now 0
2018-08-17 20:54:32 Pac_now_avg 0
2018-08-17 20:54:32 S0_Day 8834
2018-08-17 20:54:32 S0_Day_avg 8803
2018-08-17 20:54:32 S0_Mon 101944
2018-08-17 20:54:32 S0_Mon_avg 101913
2018-08-17 20:00:39 S0_Pac_now 30
2018-08-17 20:54:32 S0_Year 2433763
2018-08-17 20:54:32 S0_Year_avg 2433732
2018-08-17 20:54:32 S0_all 31591940
2018-08-17 20:54:32 S0_all_avg 31591909
2018-08-17 20:54:32 S0_now 639
2018-08-17 20:54:32 S0_now_avg 749
Attributes:
avg_count 10
register 3502,Pac_now,3518,S0_now,3520,S0_Day,3524,S0_Mon,3526,S0_Year,3516,Pac_all,3508,Pac_Day,3512,Pac_Mon,3514,Pac_Year,3528,S0_all
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' }}
userattr userReadings BattStateHuman Batt_State
So nun muss das Reading Batt_State mal aktualisiert werden. Vorher passiert gar nichts. Das userattr kannst löschen. Ist bestimmt unabsichtlich gemacht worden.
Batt_State ist jetzt mehrfach aktuallisiert worden, ich habe auch ein shutdown restart gemacht.
Die "4" wird aber weiterhin in meiner Tabelle unter Batt_State angezeigt. Auch die Fehlermeldung im "list" von mySL_now ist noch drin.
2018-07-27 12:12:00 Batt_Output_Counter 0
2018-07-27 11:42:07 Batt_Pow 0
2018-08-17 21:17:25 Batt_State 4
2018-08-17 21:17:25 Batt_Temp 27.20
2018-08-17 20:11:18 Batt_State Error evaluating mySL_now userReading Batt_State: Can't modify non-lvalue subroutine call in scalar assignment at (eval 160512) line 1, near "6 ) "
Was mache ich noch falsch?
Gruß
Nobbi
Sorry aber ich verstehe nur Bahnhof.
Batt_State Error evaluating mySL_now userReading Batt_State
Batt_State 4
Welchen Wert hat das Reading denn nun. Beides kann es nicht haben.
Aktualisiert sich das Reading Batt_State vom Device mySL_now wo du ja das userReadings angegeben hast?
Im Moment gibt die Batterie über den Modbus des SolarEdge Inverters den Status 4 heraus und zwar so:
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_Temp: 27.40
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_Watt: -677
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_Out_Count: 1638
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_In_Count: 302
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_Fill: 84.49
2018-08-17 21:33:56 ModbusAttr SolarEdge Batt_State: 4
der alle 30 sek völlig unabhängig ausgelesen wird. mySL_now sind die Daten aus einem Solarlog an dem die 2 Wechselrichter hängen. Dort wird die erzeugte Leistung gemessen und der SolarEdge regelt dahinter die Verteilug der Energie: Einspeisung, Batterieladung-entladung und den Verbrauch.
Den Wert Batt_State hole ich also aus dem SolarEdge, wie auch alle anderen Werte. Die funktionieren alle. Das sieht so aus:
#attr mySL_now userReadings Pac_S0_now {if (ReadingsVal("mySL_now", "S0_now", "0") > ReadingsVal("mySL_now", "Pac_now", "0")) {return '0'} else {ReadingsVal("mySL_now", "Pac_now", "0") - ReadingsVal("mySL_now", "S0_now", "0")+ ReadingsVal("SolarEdge", "Batt_Watt", "0")}},Co2_all {ReadingsVal("mySL_now", "Pac_all", "0")*0.70},S0_Pac_now {if (ReadingsVal("mySL_now", "Pac_now", "0") - ReadingsVal("SolarEdge", "Batt_Watt", "0") > ReadingsVal("mySL_now", "S0_now", "0")) {return '0'} else {ReadingsVal("mySL_now", "S0_now", "0") - ReadingsVal("mySL_now", "Pac_now", "0") + ReadingsVal("SolarEdge", "Batt_Watt", "0")}},Pac_S0_now_avg {ReadingsVal("mySL_now", "Pac_now_avg", "0")- ReadingsVal("mySL_now", "S0_now_avg", "0")}
wo ich dann die Werte miteinander verechne. Und dort soll dann auch die Anzeige für den Status mit eingefügt werden. Ich hoffe das ist einigermassen verständlich.
Die ganze Werte werden dann in einer ReadingGroup zusammengefasst und in einer Tabelle und grafisch auf dem Dashboard dargestellt.
Gruß
Nobbi
Sorry da kann ich nicht helfen.
Jetzt habe ich dich "verschreckt". Das wollt ich nicht. Schade. Alles läuft ja bei mir einwandfrei seit Jahren und die Verrechnung mache ich ja auch selber. Das war ja nur zur Info was ich mit dem gewonnene Wert mache. Mehr nicht.
Es geht mir ja nur darum das ich den Status der in SolarEdge:Batt_State steckt anders darstellen möchte. Also wenn eine 4 kommt soll die 4 nur "übersetzt" werden in z.B. "laden" die ich dann als "laden" in meiner Tabelle anzeigen kann. Der neue Wert bzw Beschreibung kann ja auch dann in zb "SolarEdge:Batt_State_TXT" stecken, dann kann ich diesen statt Batt_State anzeigen und schon ist der Fall fertig. Das ist alles was ich machen möchte. Also eine Verschönerung der Darstellung.
Alles andere ist Beiwerk, was ich schon größtenteils am Laufen habe.
Vielleicht fällt dir doch noch was ein, bin morgen wieder online.
Gute Nacht
Norbert
Da du ja das Reading Batt_Stat von deinem Solar Edge abfragen willst, musst anstatt $name
ReadingsVal("SolarEdge", ....
eingeben.
Hast du denn schon mal meinen Code ausprobiert?
Zitat von: cocojambo am 17 August 2018, 15:28:25
Ich habe auch auf Anhieb nicht gesehen was an "return" falsch, vielleicht hören irgendwo noch ein paar Klammern hin.
nein, die Frage ist aber wie du versucht hast meinen Einzeiler einzugeben.
Im Webinterface via mySL_now , Attribut userReadings auswählen , in die kleine Eingabezeile klicken und dann im großen Fenster
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];}
oder
im Webinterface via mySL_now , Raw definitions und dann im großen Fenster darunter das attr überschreiben bzw. einfügen
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];;}
und dann Execute commands. Beide Wege führen zum gleichen Ergebniss ohne irgendwelche Auswirkungen auf andere Geräte in der fhem.cfg
Ich hatte mich heute morgen erst mal daran gesetzt und habe den Vorschlag von dafex ausprobiert und $name durch SolarEdge ersetzt mit und ohne"........" und auch BattStateHuman ersetzt, ohne Erfolg.
Dann habe ich den Vorschlag der am Anfang des Threads steht probiert ans laufen zu kriegen, nachdem ich daran ein paar Änderungen gemacht hatte, stand plötzlich im "list mySL_now" ein Wert für Batt_State. Nach einigen Versuchen habe ich dann das so ans laufen bekommen:
attr mySL_now userReadings Batt_State {ReadingsVal("SolarEdge", "Batt_State", "") == 0 ? "ist aus" : ReadingsVal("SolarEdge", "Batt_State", "") == 3 ? "wird geladen" : ReadingsVal("SolarEdge", "Batt_State", "") == 4 ? "wird entladen" : ReadingsVal("SolarEdge", "Batt_State", "") == 6 ? "erhaltungsladen" : "unbekannt"}
Damit gehts auf jeden Fall und ich habe das auch schon in meine Berechnungen eingefügt und auch dort scheint es zu gehen. Ob diese Lösung nun die Eleganteste ist weiß ich nicht, aber ich möchte eigendlich nicht noch was anders ausprobieren, es sei denn, es stellt im Verlauf meiner weiteren Programmierung heraus, das diese Version nicht auf Dauer brauchbar ist.
Ich möchte mich auf jeden Fall bei Allen die mir hier geholfen haben und keine Mühe und Zeit gescheut haben, herzlich bedanken.
Mit handwerklichem Gruß aus dem z.Zt. sonnigen Köln-Dellbrück
Norbert
PS: ich hoffe es hat geklappt: ich habe mal eine Foto als .jpg von meiner noch nicht ganz fertigen Solarseite angehangen.