Hauptmenü

(Gelöst) Syntaxfehler

Begonnen von is2late, 14 Dezember 2023, 18:18:24

Vorheriges Thema - Nächstes Thema

is2late

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
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

is2late

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?

Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

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
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

TomLee

#4
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.

betateilchen

Ersetze mal

Next Calibration
durch

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

is2late

@Tom Lee und Betateilchen:
Vielen Dank, hat geklappt!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

TomLee

#7
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)

betateilchen

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

TomLee

Zeig halt wie es übersichtlicher geht, statt ständig unnötig die Menschheit zu necken.

betateilchen

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)?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

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.

is2late

Danke für Deine Mühe, TomLee!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox