Hauptmenü

PowerFlow in Doif mit SVG

Begonnen von schwatter, 06 Oktober 2024, 21:09:39

Vorheriges Thema - Nächstes Thema

schwatter

Zitat von: Damian am 09 Oktober 2024, 16:00:14
Zitat von: schwatter am 09 Oktober 2024, 08:37:54Morgen,

schau ich mir an. Mein Problem ist momentan, das alles funktioniert, aber bei einem trigger es kurz abhackt und von vorne anfängt.
Sprich, wenn der animierte Punkt irgendwo in der Mitte ist, startet er abrupt von vorne.
Das minimiere ich durch den Trigger auf meinen Tasmota Stromausleser. Der ist auf Senden alle 25s eingestellt.
Jetzt überlege ich, wie kann ich das trennen.
Da warte ich nochmal auf einen Beispiellink von pah.
Vielleicht funktioniert das auch bei dir im uiTable.
In dem Modul SolarForecast sehe ich das auch. Da fällt es aber nicht so auf, weil die animierten Linien gleichmäßig wandern, bzw. die Balken.

Gruß schwatter

Ich habe in card Animationen wieder abgeschaltet, weil sie im Browser last produzieren - ist ganz schlecht, wenn man remote arbeitet

@Damian

Bedeutet für mich, erstmal deinen Vorschlag mit "uiTable_Schnelleinstieg#Eigene_uiTable-Funktionen_programmieren" nicht verfolgen?


@tobi01001

Ja genau, ich habe ja alles zusammengewürfelt. Das führt dazu, das der eine Trigger das Bild neu erstellt.
Und den habe ich auf 25s herausgezögert. Das ist schon ganz ok, man(n) starrt ja nicht stundenlang auf den Flow.
Interessante Gedanken, alles in verschiedene Readings auszulagern. Viele Trigger funktionieren nur, wenn alle
Elemente einzeln behandelt werden können. Dann muss keiner auf den anderen Rücksicht nehmen.

Noch möchte ich mich in Fhem bewegen. Also, einfachste Bordmittel.

Gruß schwatter

Damian

Das Problem ist wie von @tobi01001 schon angemerkt, dass du beim Statuswechsel das ganze SVG-Bild neu überträgst.

Du musst den einzelnen SVG-Elementen getrennte ID-Attribute definieren, sodass nur diese bei Änderungen aktualisiert werden und nicht alles. Ich habe das bereits für einzelne Zellen der Tabelle in uiTable programmiert, diese Mechanismen werden aber nicht innerhalb eines einzigen SVG-Bildes funktionieren.

Wenn du es elegant haben willst, dann musst etwas warten bis ich wieder Zeit zum Programmieren finde.

Aber wie von mir schon angemerkt, Animationen sind je nach Anwendungsfall nicht immer erwünscht.

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

schwatter

Morgen,

genau. Das hatte ich auch schon bemerkt, aber vielleicht nicht richtig beschrieben. Ganzes SVG-Bild wird neu gebaut, daher alles auf Anfang.
Und ok verstanden, uiTable fällt dann erst mal raus.

Jetzt habe ich nochmal zum Triggern Fragen. Ich hatte beim ersten Versuch, in den IF Blöcken überall ein ? vor den Devices.

   (IF ([?MQTT2_zigbee_Kuehlschrank:power] > 0)
(setreading svgDOIF style_fridge '') )

Und wollte den Hauptrigger einmal ausführen lassen.

## Mein Trigger
([MQTT2_Smartmeter_2E1F50:"^StatusSNS_APOX_Power:.*$"])
    (setreading svgDOIF svg on)

Das führte aber zu einem Error. Das sah für mich aus wie, "DOIF meckert, so darf das nicht". Deshalb hatte ich bei den IF's die ganzen ? Wieder entfernt. Gestern ist mir
aufgefallen, so wie es im Code beschrieben habe, ist es ja nicht. Jedes Device wird getriggert...
Daher habe ich nochmal alle ? vor den Devices gesetzt. Danach wird das DOIF von meinem Smartmeter getriggert, aber alle Devices darunter haben sich durch das Fragezeichen
nicht aktualisiert.

Daher die Frage, wie kann ich den Code anpassen, das das Smartmeter der Trigger ist, und danach die ganzen IF einfach stumpf abgearbeitet werden?
Muss ich da am Besten anch Perl wechseln oder geht es in DOIF? Hier nochmal die DEF:

## Mein Trigger
([MQTT2_Smartmeter_2E1F50:"^StatusSNS_APOX_Power:.*$"])
    (setreading svgDOIF svg on)

## Animierter Punkt von Haus zu Kühlschrank (an|aus)
   (IF ([MQTT2_zigbee_Kuehlschrank:power] > 0)
(setreading svgDOIF style_fridge '') )
   (IF ([MQTT2_zigbee_Kuehlschrank:power] == 0)
(setreading svgDOIF style_fridge style="display: none;;") )

## Animierter Punkt von Haus zu Trockner (an|aus)
   (IF ([MQTT2_zigbee_Trockner:power] > 0)
(setreading svgDOIF style_dryer '') )
   (IF ([MQTT2_zigbee_Trockner:power] == 0)
(setreading svgDOIF style_dryer style="display: none;;") )

## Animierter Punkt von Haus zu Luftentfeuchter (an|aus)
   (IF ([Luftentfeuchter:ENERGY_Power] > 0)
(setreading svgDOIF style_airdryer ''))
   (IF ([Luftentfeuchter:ENERGY_Power] == 0)
(setreading svgDOIF style_airdryer style="display: none;;") )

## Animierter Punkt von Haus zu Geschürrspüler (an|aus)
   (IF ([MQTT2_zigbee_Geschirrspueler:power] > 0)
(setreading svgDOIF style_dishwasher '')  )
   (IF ([MQTT2_zigbee_Geschirrspueler:power] == 0)
(setreading svgDOIF style_dishwasher style="display: none;;") )

## Animierter Punkt von Haus zu Waschmaschine (an|aus)
   (IF ([MQTT2_zigbee_Waschmaschine:power] > 0)
(setreading svgDOIF style_washer '') )
   (IF ([MQTT2_zigbee_Waschmaschine:power] == 0)
(setreading svgDOIF style_washer style="display: none;;") )

## Animierter Punkt von Solar zu Haus (an|aus)
   (IF ([MQTT2_OpenDTU_585584:power] > 0)
(setreading svgDOIF style_solarToHouse '') )
   (IF ([MQTT2_OpenDTU_585584:power] == 0)
(setreading svgDOIF style_solarToHouse style="display: none;;") )

## Animierter Punkt von  Netz zu Haus (an|aus)
   (IF ([MQTT2_Smartmeter_2E1F50:APOX_Power] > 0 )
(setreading svgDOIF style_gridToHouse ''))
   (IF  ([MQTT2_Smartmeter_2E1F50:APOX_Power] <= 0 )
(setreading svgDOIF style_gridToHouse style="display: none;;") )

## Animierter Punkt von Solar zu Netz (an|aus)
   (IF ([MQTT2_OpenDTU_585584:power] > [MQTT2_Smartmeter_2E1F50:APOX_Power])
(setreading svgDOIF style_solarToGrid '') )
   (IF ([MQTT2_OpenDTU_585584:power] < [MQTT2_Smartmeter_2E1F50:APOX_Power])
(setreading svgDOIF style_solarToGrid style="display: none;;") )


Gruß schwatter