FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: is2late am 14 Dezember 2023, 18:18:24

Titel: (Gelöst) Syntaxfehler
Beitrag von: is2late am 14 Dezember 2023, 18:18:24
Hi,

ich kämpfe mit der Syntax im StateFormat:
{
"PV-Leistung: ".int(ReadingsVal($name, "power_solarA", "0")+ReadingsVal($name, "power_solarB", "0"))." W
(NO: ".int(ReadingsVal($name, "power_solarA", "0"))." W /
SW: ".int(ReadingsVal($name, "power_solarB", "0"))." W)<br>
Gesamtertrag heute: ".sprintf("%.2f", (ReadingsVal($name, "energy_day", "0")/1000))." kWh<br>
Netz-".((ReadingsVal($name, "power_grid_total", 1) < 0) ? "Einspeisung" : "akt.Bezug").": ".int(abs(ReadingsVal($name, "power_grid_total", "-")))." W  * Bezug heute: ".int(ReadingsVal($name, "energy_day_household_external", "-"))." kWh<br>
Hausverbrauch akt: ".int(ReadingsVal($name, "power_household_external", "-"))." W  * Heute: ".int(ReadingsVal($name, "energy_day_household", "-"))." kWh<br>
Batterie-".((ReadingsVal($name, "power_battery", 1) < 0) ? "Ladung" : "ENTladung").": ".int(abs(ReadingsVal($name, "power_battery", "-")))." W<br>
Next Calibration: ".int(scalar(localtime(ReadingsVal($name, "power_mng_bat_next_calib_date", "0")).""
}

Angezeigter Fehler: syntax error at (eval 39499) line 10, at EOF

Ohne "Next Calibration" funktioniert alles wunschgemäß.

Sieht jemand meinen Fehler?

Vielen Dank,
Ingo
Titel: Aw: Syntaxfehler
Beitrag von: betateilchen am 14 Dezember 2023, 18:23:14
int(scalar(localtime(ReadingsVal($name, "power_mng_bat_next_calib_date", "0"))
Nimm die Finger einer Hand und zähle einfach nach, wieviele Klammern Du hier öffnest und wieviele Du wieder schließt.

Dann kommst Du selbst auf den Fehler.
Titel: Aw: Syntaxfehler
Beitrag von: is2late am 14 Dezember 2023, 18:42:40
Vielen Dank, Betateilchen,
das hat den Syntaxfehler weggebracht.

Allerdings führt dieser Code zu einem "Rechtspfeil" (???) im Overview und Inhalt "0" bei "Next Calibration", obwohl dort eigentlich das Datum 12.1.24 auftauchen müsste. Das erscheint auch ordnungsgemäß im Reading.
Vermutlich habe ich also einen anderen Fehler drin.
Im Userreading steht

power_mng_bat_next_calib_date_human_readable:power_mng_bat_next_calib_date.* {
scalar(localtime(ReadingsVal($name, "power_mng_bat_next_calib_date", "0")));; }

Das habe ich wohl nicht richtig in das stateFormat umgesetzt?

Titel: Aw: Syntaxfehler
Beitrag von: is2late am 14 Dezember 2023, 19:03:01
Ha, auf einmal funktioniert es. Hab den Zeilenvorschub weggenommen und schon wird im STATE der richtige Wert angezeigt, warum auch immer....

{
"PV-Leistung: ".int(ReadingsVal($name, "power_solarA", "0")+ReadingsVal($name, "power_solarB", "0"))." W
(NO: ".int(ReadingsVal($name, "power_solarA", "0"))." W /
SW: ".int(ReadingsVal($name, "power_solarB", "0"))." W)<br>
Gesamtertrag heute: ".sprintf("%.2f", (ReadingsVal($name, "energy_day", "0")/1000))." kWh<br>
Netz-".((ReadingsVal($name, "power_grid_total", 1) < 0) ? "Einspeisung" : "akt.Bezug").": ".int(abs(ReadingsVal($name, "power_grid_total", "-")))." W  * Bezug heute: ".int(ReadingsVal($name, "energy_day_household_external", "-"))." kWh<br>
Hausverbrauch akt: ".int(ReadingsVal($name, "power_household_external", "-"))." W  * Heute: ".int(ReadingsVal($name, "energy_day_household", "-"))." kWh<br>
Batterie-".((ReadingsVal($name, "power_battery", 1) < 0) ? "Ladung" : "ENTladung").": ".int(abs(ReadingsVal($name, "power_battery", "-")))." W *
Next Calibration: ".(scalar(localtime(ReadingsVal($name, "power_mng_bat_next_calib_date", "0")))).""
}

Allerdings bleibt im Overview der grüne Rechtspfeil. Kennt jemand dessen Bedeutung bzw wie man ihn wegbekommt?

LG
Titel: Aw: Syntaxfehler
Beitrag von: TomLee am 14 Dezember 2023, 19:12:38
Next matcht in stateFormat halt das Icon Next. Benenne das um, oben nutzt ja auch eine deutsche Beschreibung.

edit:
und so wie du das definierst, versteh ich es so (ohne mich wirklich damit beschäftigt zu haben), das am Ende der .und die folgenden zwei " nicht gebraucht werden/falsch sind.
Titel: Aw: Syntaxfehler
Beitrag von: betateilchen am 14 Dezember 2023, 19:38:42
Ersetze mal

Next Calibration
durch

Next&nbsp;Calibration
Titel: Aw: Syntaxfehler
Beitrag von: is2late am 15 Dezember 2023, 14:37:31
@Tom Lee und Betateilchen:
Vielen Dank, hat geklappt!
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: TomLee am 15 Dezember 2023, 15:34:55
Hab das mal etwas übersichtlicher und optimiert definiert (kann sein das ich nicht alles richtig verstanden habe).

So in der Art würd ich es bei mir umsetzen, allerdings würd ich es in devStateIcon (damit STATE sauber bleibt) verwenden (dazu müsste um den Code der zurückgegeben wird noch ein div oder td):
{
my $psa=ReadingsNum($name,'power_solarA',0,0);
my $psb=ReadingsNum($name,'power_solarB',0,0);
my $pv=$psa+$psb;
my $ed=sprintf("%.2f",ReadingsNum($name,'energy_day',0)/1000);
my $nea=abs(ReadingsNum($name,'power_grid_total',0,0));
my $neb=$nea < 0 ? 'Einspeisung' : 'akt.Bezug';
my $edhe=ReadingsNum($name,'energy_day_household_external',0,0);
my $phe=ReadingsNum($name,'power_household_external',0,0);
my $edh=ReadingsNum($name,'energy_day_household',0,0);
my $pb=abs(ReadingsNum($name,'power_grid_total',0,0));
my $pble=$pb < 0 ? 'Ladung' : 'Entladung';
my $pmbncd=scalar(localtime(ReadingsVal($name,'power_mng_bat_next_calib_date',0)));

qq(PV-Leistung: $pv W &lpar;NO: $psa W / SW: $psb W&rpar;<br>
Gesamtertrag heute: $ed kWh<br>
Netz-$neb: $nea W  * Bezug heute: $edhe kWh<br>
Hausverbrauch akt: $phe W  * Heute: $edh kWh<br>
Batterie-$pble: $pb W * Next Calibration: $pmbncd)
}

(Wenn man die Next Calibration-Zeile in der Batterie.* Zeile hinten ran hängt braucht man das HTML-Leerzeichen nicht in stateFormat, in devSateIcon ist das eh egal)
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: betateilchen am 15 Dezember 2023, 15:49:14
Zitat von: TomLee am 15 Dezember 2023, 15:34:55Hab das mal etwas übersichtlicher und optimiert

*prust*
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: TomLee am 15 Dezember 2023, 16:00:53
Zeig halt wie es übersichtlicher geht, statt ständig unnötig die Menschheit zu necken.
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: betateilchen am 15 Dezember 2023, 16:10:13
Naja, Du hast halt das Thema verfehlt.
In der Schule gäbe es dafür maximal ein "mangelhaft".

Thema des Threads war das Finden und Beseitigen eines Syntaxfehlers. Das wurde längst erledigt.

Glaubst Du allen Ernstes, dass jemand, der offensichtlich nicht in der Lage war, die gleiche Anzahl von Klammern zu schließen, die er auch geöffnet hat, das versteht (!), was Du da zusammengeschräubelt hast (und was meiner Meinung nach nie direkt in ein Attribut gehört)?
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: TomLee am 15 Dezember 2023, 20:11:53
ZitatIn der Schule gäbe es dafür maximal ein "mangelhaft".

Ist mir bewusst, genau aus der Zeit, da hat man auch schon Schüler mit einer Bemerkung im Bewerbungszeugnis bestraft, wenn man sich für das schwächere Glied eingesetzt hat.
Titel: Aw: (Gelöst) Syntaxfehler
Beitrag von: is2late am 15 Dezember 2023, 22:16:04
Danke für Deine Mühe, TomLee!