stateFormat in TeslaCar verhält sich seltsam

Begonnen von kamp, 13 Juni 2023, 09:54:28

Vorheriges Thema - Nächstes Thema

kamp

Hallo,
ich habe ein Device "TeslaCar" und möchte dort mittels stateFormat und defStateIcon es etwas hübscher machen. Mein erster Ansatz war:

attr fin devStateIcon online:car_in@green asleep:car_in@blue:wakeUpCar offline:car_in@red:wakeUpCar Charging:electric_car_charger@green Complete:electric_car_charger@blue
attr fin stateFormat state<br/>charging_state

Das funktioniert leider nicht, hier zeigt er mir leider nur den Text der beiden Readings an, nicht die Icons aus devStateIcon.

Mein zweiter Versuch war der:
attr fin devStateIcon online:car_in@green asleep:car_in@blue:wakeUpCar offline:car_in@red:wakeUpCar Charging:electric_car_charger@green Complete:electric_car_charger@blue
attr fin stateFormat {ReadingsVal("$name","state","offline"). sprintf("<br/>").ReadingsVal("$name","charging_state","Complete")}

Hier werden mir nun zwar wieder zwei Zeilen im state angezeigt, aber ebenfalls als Text, nicht als Icons wie in devStateIcon definiert. Was ist hier falsch?

betateilchen

#1
Mein Bauchgefühl sagt mir, dass das <br/> in stateFormat da nicht hingehört.
Bei mir ist da jedenfalls in mehrzeiligen Fällen immer ein newLine, kein <br/>
Gib doch die zwei Zeilen mal direkt im Frontend ein, anstatt sie von Hand in die Konfiguration zu schreiben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

ch.eick

#2
Ich habe meinen falschen Post gelöscht.

VG  Christian
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

betateilchen

Zitat von: ch.eick am 13 Juni 2023, 15:51:28So wie es da steht würde der "/" ein escapen von ">" bedeuten,

Das ist doch Unfug. Escapen macht man mit \ und nicht mit /
<br/> ist ein völlig korrekter HTML Ausdruck.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kamp

#4
also es funktioniert weder mit <br> und ein NewLine kann ich nicht einfügen, da beim TeslaCar Device sich nicht das Popup mit dem mehrzeiligen Editor öffnet zur Eingabe, wie bei allen anderen Devices, wenn man in das Textfeld klickt. Ich editiere nicht in der Konfigurationsdatei, ausschließlich übers UI.

ch.eick

Zitat von: betateilchen am 13 Juni 2023, 17:28:29
Zitat von: ch.eick am 13 Juni 2023, 15:51:28So wie es da steht würde der "/" ein escapen von ">" bedeuten,

Das ist doch Unfug. Escapen macht man mit \ und nicht mit /
<br/> ist ein völlig korrekter HTML Ausdruck.
Okay, ich korrigiere meinen Post...
RPI4; Docker; CUNX; Eltako FSB61NP; SamsungTV H-Serie; Sonos; Vallox; Luxtronik; 3x FB7490; Stromzähler mit DvLIR; wunderground; Plenticore 10 mit BYD; EM410; SMAEM; Modbus TCP
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/ch.eick

Otto123

#6
@kamp versuch mal - bitte direkt so in die Kommandozeile einwerfen
attr fin stateFormat state\
charging_state
Oder im "attr Editor" einfach einen Zeilenumbruch einfügen.nicht richtig gelesen: letzteres geht nicht. Aber per attr Befehl sollte es gehen?
 
Achtung: Damit wird der STATE mehrzeilig und der Inhalt von devStateIcon wird für jede STATE Zeile angewendet. Die Ansicht in der Device Übersicht wird damit nicht automatisch mehrzeilig!
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

betateilchen

Zitat von: kamp am 14 Juni 2023, 07:50:07und ein NewLine kann ich nicht einfügen, da beim TeslaCar Device sich nicht das Popup mit dem mehrzeiligen Editor öffnet zur Eingabe, wie bei allen anderen Devices, wenn man in das Textfeld klickt.

Das deutet für mich darauf hin, dass die readingsFnAttributes nicht wie vorgesehen in das zugehörige Modul eingebunden sind. stateFormat bringt bei korrekter Implementierung das textfield-long automatisch mit. Du solltest das aber zumindest manuell per widgetOverride nachträglich machen können.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Otto123

Zitat von: betateilchen am 14 Juni 2023, 11:14:56sich nicht das Popup mit dem mehrzeiligen Editor öffnet ...
das nicht habe ich doch glattweg dreimal überlesen  :-X
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

betateilchen

Zitat von: betateilchen am 14 Juni 2023, 11:14:56Das deutet für mich darauf hin, dass die readingsFnAttributes nicht wie vorgesehen in das zugehörige Modul eingebunden sind.


sub TeslaCar_Initialize($)
{
  my ($hash) = @_;

  $hash->{SetFn}     = "TeslaCar_Set";
  $hash->{DefFn}     = "TeslaCar_Define";
  $hash->{GetFn}     = "TeslaCar_Get";
  $hash->{AttrList}  = "updateTimer pollingTimer streamingTimer dataRequest stateFormat";
}

q.e.d.

Es ist für mich ziemlich unklar, wo man nun eigentlich die aktuelle Version von 49_TeslaCar.pm herbekommt.
Aber egal, welche Version aus welcher Quelle ich mir angeschaut habe, der Code ist an vielen Stellen ziemlich gruslig zusammengefrickelt.

Hoffentlich findet das in dieser Form nie den Weg in die offizielle Verteilung von FHEM.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kamp

Zitat von: Otto123 am 14 Juni 2023, 10:07:33@kamp versuch mal - bitte direkt so in die Kommandozeile einwerfen
attr fin stateFormat state\
charging_state
Oder im "attr Editor" einfach einen Zeilenumbruch einfügen.nicht richtig gelesen: letzteres geht nicht. Aber per attr Befehl sollte es gehen?
 
Achtung: Damit wird der STATE mehrzeilig und der Inhalt von devStateIcon wird für jede STATE Zeile angewendet. Die Ansicht in der Device Übersicht wird damit nicht automatisch mehrzeilig!
Leider kein Erfolg, das kommt dabei raus:
Du darfst diesen Dateianhang nicht ansehen.


Otto123

#11
Ja mein Fehler, ich meinte nicht die (einzeilige) Kommandozeile sondern die Raw Definition. Findest Du je nach Oberfläche / Version unter dem Device , hinter dem Copy for Forum ... Klappmenu oder beim großen Plus links oben vor der einzeiligen Kommandozeile.
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

kamp

Zitat von: betateilchen am 14 Juni 2023, 11:14:56
Zitat von: kamp am 14 Juni 2023, 07:50:07und ein NewLine kann ich nicht einfügen, da beim TeslaCar Device sich nicht das Popup mit dem mehrzeiligen Editor öffnet zur Eingabe, wie bei allen anderen Devices, wenn man in das Textfeld klickt.

Das deutet für mich darauf hin, dass die readingsFnAttributes nicht wie vorgesehen in das zugehörige Modul eingebunden sind. stateFormat bringt bei korrekter Implementierung das textfield-long automatisch mit. Du solltest das aber zumindest manuell per widgetOverride nachträglich machen können.
Das verstehe ich leider nicht, laut Wiki ist ein widgetOverride dazu da, Bedienelemente, die vom Modulautor eigentlich vorgesehen waren, verändern. So wie ich das sehe, könnte ich da eines der möglichen Widgets anzeigen lassen. Aber keines bietet ein passendes Symbol wie in meinem Eingangsbeitrag.
Meine Überlegung ging so weit:
attr widgetOverride state:Das Ding ist ja, dass dieser set-Befehl ein anderer ist, als das Reading. Andere Beispiele im Forum verfolgen da ja einen einfacheren Ansatz: attr EZ.Thermostat widgetOverride setpointHeating:knob,min:16,max:24.
Ich will ja nicht den state setzen... sondern ein Icon farblich abhängig vom state angezeigt bekommen und bei gewissen state-Zuständen den set-Befehl zum aufwachen hinterlegen.

Sowas ginge z.B. beim set-Befehl für den SoC, aber das habe ich einfach mit einem webCmd gelöst:
attr fin webCmd charge_limit_soc

kamp

Zitat von: Otto123 am 16 Juni 2023, 16:08:14Ja mein Fehler, ich meinte nicht die (einzeilige) Kommandozeile sondern die Raw Definition. Findest Du je nach Oberfläche / Version unter dem Device , hinter dem Copy for Forum ... Klapmenu oder beim großen Plus links oben vor der einzeiligen Kommandozeile.

Mein Held! Danke, wusste bislang gar nicht, dass man darin auch bearbeiten kann, habe das immer nur zum rauskopieren verwendet  :P
Du darfst diesen Dateianhang nicht ansehen.

betateilchen

Zitat von: kamp am 16 Juni 2023, 16:16:13stateFormat bringt bei korrekter Implementierung das textfield-long automatisch mit. Du solltest das aber zumindest manuell per widgetOverride nachträglich machen können.
...
Das verstehe ich leider nicht, laut Wiki ist ein widgetOverride dazu da, Bedienelemente, die vom Modulautor eigentlich vorgesehen waren, verändern.

Bei meinem Vorschlag ging es nicht um das gesuchte devStateIcon, sondern darum, im Attribut stateFormat den mehrzeiligen Editor zu bekommen.

attr fin widgetOverride stateFormat:textField-long
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!