readingsgroup Multidevice einzeilig [old:devStateIcon Perl if else html]

Begonnen von draddy, 07 März 2022, 16:16:13

Vorheriges Thema - Nächstes Thema

draddy

moin,

wusste nicht recht wohin damit ...

will mir nen Dummy Bauen, mit dem ich mehrere Geräte über einen Dummy schalten kann (nix tragisches, nur Toggle bzw. ON / OFF)

Da ich webCmd nicht mag, soll das ganze ins devStateIcon und ich dachte mir, das sollte doch möglich sein, OHNE zusätzliche notifys oder sowas ... grundlegend, ist es ^^

hier mal das devStateIcon fürs erste Gerät (mein PC)

{my $pc = ReadingsVal('draddypc','state','off') eq 'off'?'it_nas@red':'it_nas@green'; $pc = FW_makeImage($pc); qq
(<a href="/fhem?cmd.dummy=set draddypc off &XHR=1">${pc}</a>)}


da WOL kein toggle kennt, muss ich das "umschiffen" jetzt meine frage, kann ich in den if / else part von my $pc eine 2. Variable einbauen, (nennen wir sie $pcS) wo ich im Zuge der Abfrage sofort sagen kann 'on' bzw. 'off'
dann könnte ich diese im HTML Part verwenden, um den set Befehl abzusetzen.

der Rest scheint zu klappen, wenigstens wird mir das Icon in Grün angezeigt, (wird also erkannt, das der PC AN ist) und wenn ich drauf klicke wird der OFF Befehl ausgeführt.

"Unelegant" könnte man natürlich sagen "mach einfach die gleiche if else nochmal für den Status ... aber ... ihr wisst bestimmt wie es eleganter geht ;P

THX
Jens
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Zur Frage an sich:
Du hast doch schon eine Abfrage. Warum stellst du die nicht um und verwendest das Ergebnis nochmal?
Ungetestet (if-else in der Schreibweise "ternärer Operator", unterstellt, du willst wirklich ON/OFF haben wie angefragt!):
{my $pc = ReadingsVal('draddypc','state','off') eq 'off'? 0:1; my $new = $pc ? 'ON' : 'OFF'; $pc = FW_makeImage($pc?'it_nas@green':'it_nas@red'); qq
(<a href="/fhem?cmd.dummy=set draddypc $new &XHR=1">${pc}</a>)}
Trotzdem ist dieses dummy-Geschubse hochgradig suspekt.

Für was willst du sowas haben? readingsGroup ist bekannt? readingsProxy auch?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

#2
hätte mir ja denken können das du der erste bist xD

d.h. so gehts nicht? also "normale" if else draus machen ... Ergebnis nochmal verwenden ... dachte ich auch zuerst, aber irgendwie knoten im Hirn ... Bräuchte ich dann nicht trotzdem ne 2. if / else bzw. ternäre Operation? 

denke du meinst alla

my $pcS = Reading ... wenn off = on sonst off
my $pc = wenn $pcS on dieses icon sonst anderes icon


oder bin ich aufm holzigen Weg?

readingsGroud und Proxy jain ... nein xD aber ich werf vll mal nen blick rüber ;)


Für was?
Will mir letztlich ne kompakte Raumübersicht über die Sachen machen die ich mehrfach am Tag schalte und Quasi Pro Raum einen Dummy machen.
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Sorry, in meinem Code war vermutlich ON und OFF vertauscht, so sollte es passen:
my $new = $pc ? 'OFF' : 'ON';
und genau das passiert doch: es wird dann noch 2x mit ternärem Operator ausgewertet...

Falls man für eine Raumübersicht überhaupt was separates braucht => readingsGroup
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

bin ich bleed oder wollte foren software mich trollen oO

sry irgendwie gar nicht realisiert das du im ersten post nen code hattest  :o

ja, aber, wenn ich readingsGroup auf die schnell richtig verstanden habe, sehe ich doch damit nur, oder? und kann nicht schalten?

für mich fürs verstehen ...

{my $pc = ReadingsVal('draddypc','state','off') eq 'off'? 0:1; my $new = $pc ? 'ON' : 'OFF'; $pc = FW_makeImage($pc?'it_nas@green':'it_nas@red');

wenn state off - 0 sonst 1  (ist das wie bool true / false?) d.h. die weitere abfragen übersetzen nur noch in ON + grünes Icon bzw. OFF + rotes Icon?
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Man kann per readingsGroup auch schalten, und "notfalls" auch irgendwelche speziellen Anforderungen für's Schalten drin unterbringen. Deine Idee ist ja nicht unbedingt neu...

Ja, die erste Zuweisung ist eine boolsche, wobei das in Perl tendenziell mit 0/1 codiert wird (wobei "falsch" noch ein paar andere Sachen sein können).
Noch kürzer ohne ausdrückliches 0/1:
{my $pc = ReadingsVal('draddypc','state','off') eq 'off'; my $new = $pc ? 'OFF' : 'ON'; $pc = FW_makeImage($pc?'it_nas@green':'it_nas@red'); ...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

ok, ich nehme alles zurück und behaupte das gegenteil ^^

aber ... also das readingsGroup scheint echt mächtig ...  ich will es halt relativ "rudimentär"

grundlegendes Ziel:
Ich habe einen Raum "Favs" (mein default room in fhem)
hier will ich eigentlich genau eine Zeile Pro echtem Raum (Zockerhöhle, Büro, Wohnzimmer ... ) in welcher jeweils die (für mich) wichtigsten Sachen zur Verfügung stehen.

kann ich mit readingsGroup irgendwie nebeneinander, statt untereinander darstellen? Ich brauche eigentlich "nur" das StateIcon des jeweiligen Gerätes (für welches ich eventuell anderes Symbol setze)
mit * wäre, wenn ich darüber einfach eine Überschrift setzen könnte, muss aber nicht.

Hab mal bissl rum probiert, bekomm es aber eben nicht hin die devices als eine Zeile darzustellen...
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Prinzipiell kann rG auch mehrere Werte in einer Zeile darstellen, hier mal ein Beispiel für eine zweispaltige Tabelle mit Readings aus zwei Devices:
defmod rgTemperaturen_Heizung readingsGroup <%temp_temperature>,<Vorlauf>,<Rücklauf> MYSENSOR_96:,<Hauptleitung>,temperature24,temperature23 \
MYSENSOR_98:,<Altbau_allg.>,temperature27,temperature28 \
MYSENSOR_98:,<Neubau_allg.>,temperature23,temperature22 \
MYSENSOR_98:,<Bodenkonvektor>,temperature23,temperature24\
MYSENSOR_98:,<Bad>,temperature25,temperature26 \
MYSENSOR_96:,<Schlafzimmer>,temperature26,temperature27 \
MYSENSOR_98:,<WZ_Ost>,temperature29,temperature30 \
MYSENSOR_98:,<WZ_West>,temperature27,temperature31
attr rgTemperaturen_Heizung alias Vor- und Rücklauftemperaturen
attr rgTemperaturen_Heizung nonames 1
attr rgTemperaturen_Heizung room Heizung
attr rgTemperaturen_Heizung valueFormat %.1f &degC

(Im MySensors-Bereich sollte was für eine Garage zu finden sein, mit settern, soweit ich mich entsinne)

Vielleicht noch ein paar Stickworte mehr, wie man sowas ggf. auch (anders) lösen kann:
- attr column in FHEMWEB: Startseite:Wetter,Türen%20und%20Fenster,ASC|Kalender,Technik|Plot
- Modul Dashboard (kenne ich nicht aus eigener Anschauung)
- FUIP
- fhemApp
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

moin, danke

aber in dem fall ist es ja so, dass ich werte / status verschiedener devices darstellen will ...

da muss dann eben das "main" (ich nenn das einfach mal so) device angegeben werden, und die zusätzlichen zieht man mit z.B. status@2.device rein.

< >,<PC>,<Monitor>,<Lampe>,<Licht>
draddypc:state,state@Jens_Displays,state@Jens_Light,state@MQTT2_shellyplus1_441793a3b110


andere frage, wo ich mir nicht sicher bin ... attr commands

{'draddypc.state.on' => 'set draddypc off', 'draddypc.state.off' => 'set draddypc on',
'Jens_Displays.state.on' => 'set Jens_Displays off', 'Jens_Displays.state.off' => 'set Jens_Displays on'}

also, funktioniert! aber macht man das tatsächlich so?

hier mal full raw noch

defmod rgJens readingsGroup < >,<PC>,<Monitor>,<Lampe>,<Licht>\
draddypc:state,state@Jens_Displays,state@Jens_Light,state@MQTT2_shellyplus1_441793a3b110\

attr rgJens alias Zockerhöhle
attr rgJens commands {'draddypc.state.on' => 'set draddypc off', 'draddypc.state.off' => 'set draddypc on',\
'Jens_Displays.state.on' => 'set Jens_Displays off', 'Jens_Displays.state.off' => 'set Jens_Displays on'}
attr rgJens mapping %GROUP
attr rgJens nameStyle style="color:yellow;;font-weight:bold";;;;style="text-align:left"
attr rgJens nolinks 1
attr rgJens notime 1
attr rgJens room Favs
attr rgJens style style="text-align:center"
attr rgJens valueIcon {'draddypc.state.on' => 'it_nas@green', 'draddypc.state.off' => 'it_nas@red', \
'Jens_Displays.state.on' => 'rc_TV1_on@green', 'Jens_Displays.state.off' => 'rc_TV1_off@black', \
'Jens_Light.state' => '%devStateIcon', \
'MQTT2_shellyplus1_441793a3b110.state.on' =>'light_ceiling@yellow', 'MQTT2_shellyplus1_441793a3b110.state.off' =>'light_ceiling_off',}
attr rgJens valueStyle style="text-align:right"



OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Zitataber macht man das tatsächlich so?
Nun ja, wenn es funktioniert, ist doch schon mal was. An sich würde ich annehmen, dass toggle-Befehle für "Echt-Devices" nicht extra codiert werden müßten, aber um da näheres zu erfahren, müßte jemand ran, der sich vertiefter mit readingsGroup auskennt (justme1968 wird vermutlich eher oberflächlich in die Anfängerfragen schauen).

PS:
Zitat von: Beta-User am 07 März 2022, 16:29:00
dieses dummy-Geschubse hochgradig suspekt
Das hatte ich geschrieben, weil absehbar war, dass das hin- und herschubsen zu Probleme führen würde, wie sie eben in https://forum.fhem.de/index.php/topic,126650.0.html dargestellt sind. Das "Problem" ist übrigens nicht beschränkt auf "dummy", sondern gilt genauso für beliebige Reading an anderen Geräten.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

Zitat von: Beta-User am 08 März 2022, 11:27:58
An sich würde ich annehmen, dass toggle-Befehle für "Echt-Devices" nicht extra codiert werden müßten
der einwand ist für dem Monitor sicher richtig, garnicht dran gedacht ... der PC ist halt ein WOL über cmd (ssh an den docker host) ich mein da wäre kein toggle gegangen ... schau ich aber nochmal.

OT:
und, ich bin grundlegend ja bei dir mit den dummis - äh dummys und in dem fall hier ist readingsgroup auch deutlich angebrachter (obs die beste Lösung ist, wird sich wie so oft wohl noch zeigen ^^). in dem anderen post soll der dummy ja wirklich nur eine dumme aufgabe übernehmen ...
Wie schonmal erwähnt, vieles ist ja kein "ich will / muss das so machen" sondern viel mehr "ich weiss mir halt nicht besser zu helfen"  :P Irgendwas ist halt im kopf und das versuche ich, mit den mir gegebenen mitteln, umzusetzen - dann noch prinzip des geringsten widerstands führt (bei mir) schnell zu dummy  ;D

soo, geh mal readingsgroup für meine anderen zimmer basten. wenn da noch jemand tipps hat (besonders für define und command part, gerne ;)
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V

Beta-User

Zitat von: draddy am 08 März 2022, 11:51:45
der PC ist halt ein WOL über cmd (ssh an den docker host) ich mein da wäre kein toggle gegangen ... schau ich aber nochmal.
Soweit ich das im Kopf habe, wird für state eigentlich das devStateIcon weitergereicht. Wenn das am Ausgangsdevice passend konfiguriert ist, sollte es auch in rG gehen.

Zitatin dem anderen post soll der dummy ja wirklich nur eine dumme aufgabe übernehmen ...
Ein dummy hat nur eine "Aufgabe": Irgendwelche Werte zwischenzuspeichern.

Was erfahrungsgemäß schlicht und ergreifend praktisch IMMER zu Problemen führt, sind "Kaskadierungen" von Eventhandlern. Das kann man machen, muss aber dann wissen, was man tut, damit alles in der richtigen Reihenfolge abgearbeitet wird. Spätestens bei einem "rename" in 3 Monaten hattest du aber vergessen, dass das keine gute Idee gewesen war mit dem rename, oder du weißt nicht mehr, wie es richtig herum wäre...

ZitatWie schonmal erwähnt, vieles ist ja kein "ich will / muss das so machen" sondern viel mehr "ich weiss mir halt nicht besser zu helfen"  :P Irgendwas ist halt im kopf und das versuche ich, mit den mir gegebenen mitteln, umzusetzen - dann noch prinzip des geringsten widerstands führt (bei mir) schnell zu dummy  ;D
Schon klar, und du bist jetzt halt derjenige, der das Thema "mal wieder" durchackert...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

draddy

ja, jeder fängt mal klein an ... ;)

das mit devStateIcon stimmt - glaub das war meine pingelige art warm das nicht zum gewünschten Ergebnis führt (optisch, funktionell schon)
lasse devState immer ganz rechts darstellen, beim readingsgroup ist das aber "unschön" wenn (wie Monitor) etwas grössere Überschrift hat, un dann das stateIcon rechts statt mittig klebt ... und die style formatierung vom reingeladenen devstateicon scheint stärker zu sein, als die vom readingsgroup, jedenfalls habe ich, egal was ich versucht habe, es nicht geschafft das icon zu zentrieren, bis ich es halt selbst gesetzt habe und nicht auf devStateIcon verweiesen habe .. beim PC ist das normale devStateIcon einfach ein anderes, wollte für die rG aber eben gerne ein "Sprechendes" Icon haben auch ...

naja, ich bastel mal ... ist ja wie sone modelleisenbahn - wird nie fertig  ;D
OMV5@AsRock j3455 8GB RAM
FHEM@Docker, Shelly "starter pack" 4x PlugS, 2x Bulb Duo RGB, Shelly 2.5, Shelly Plus 1, DoorBird 2103V