Scripterstellung - benötige Hilfe

Hallo zusammen,
ich möchte für folgende Funktionen jeweils ein Script erstellen:

Energie Summe berechnen und in Variable schreiben:
Über mehrere Homematic Schalt / Messaktoren bekomme ich für die einzelnen Stockwerke in meinem Haus die den Energieverbrauch (Power) angezeigt.
Ich möchte nun die Energiesumme sekündlich in eine Variable „Energieverbrauch“ schreiben und diese im Webfront anzeigen.
(Leider habe ich keinen digitalen Zähler)

Zustand der Fenster in den einzelnen Etagen:
Im Webfront möchte ich auf dem ersten Blick erkennen ob alle Fenster geschlossen sind.
Daher benötige ich auch hier eine Variable (F_EG, F_OG, F_DG) die ich entsprechend bei Änderung auslöse.
(wenn mindestens ein Fenster im Erdgeschoß offen, dann F_EG=1. Sonst F_EG=0)

Klar kann ich das in der CCU sehr schnell als Programm anlegen, möchte aber gerne meine Programme in Zukunft nur über ein IPS laufen lassen.
Ich bin leider noch gar nicht so fit in PhP und würde mich über Unterstützung freuen.
Vielen Dank

Hier bekommt man meistens Unterstützung, wenn man seine vorhandenen Versuche präsentiert und sagt, was konkret nicht klappt oder wo Hilfe benötigt wird.

Ein kleiner Einstandstipp. Die HomeMatic Variablen (hier Power) sind - wie ich vermute - bereits in IPS eingebunden (HomeMatic Konfigurator). Wenn Du bei den Variablen das Logging anhakst, dann werden die Werte ab dem Zeitpunkt in der IPS Datenbank mitgeschrieben.

Das Anzeigen im WebFront ist dann nur eine simple Verlinkungen auf diese Variable.

Gesendet von iPhone XS mit Tapatalk

Eine Dummy Instanz erstellen, darunter eine Variable erstellen vom Typ Float und ein Variablenprofil zuweisen. Anschließen ein Skript erstellen und indem Skript die Werte addieren.
Beispiel:


$counter_1 = GetValue(12345); // Wert des 1. Zählers aus der Variable mit Objekt ID 12345 auslesen
$counter_2 = GetValue(23456); // Wert des 1. Zählers aus der Variable mit Objekt ID 23456 auslesen
$summary = $counter_1 + $counter_2; // Werte addieren
SetValue(34567, $summary); // Summe in der Varibale 34567 ablegen

Dann auf das Skript ein Ereignis legen das das Skript sekundlich ausführt. Gegebenenfalls dann noch Variablen loggig aktivieren um die Daten aufzuzeichnen und einen Graph zu erzeugen.

Auch hier ein Skript anlegen und eine Variable anlegen die den Zustand alle Fenster anzeigen soll und ein Variablenprofil zuweisen.
Das Skript sieht beispielsweise so aus:


// Status Fenster abrufen
$state_1 = GetValue(12345); // Fenster 1
$state_2 = GetValue(23456); // Fenster 2

// Variable für Stockwerk setzten

if($state_1 == true && $state_2 == true)
{
$state_eg = true;
}

if($state_1 == false || $state_2 == false)
{
$state_eg = false;
}
SetValue(45678, $state_eg);

Hier sind entsprechend so viele Fenster zu ergänzen wie man abfragen will. Anschließen ist auf jede Variable eines Fensters ein Ereignis zu legen bei Variablenänderung das das Skript aufruft. Dann wird jedes mal wenn sich bei einem Fenster der Status ändert geschaut wie der Gesamtstatus ist und der Wert in eine Variable geschrieben.


// Status Fenster abrufen
$state_1 = GetValue(12345); // Fenster 1
$state_2 = GetValue(23456); // Fenster 2
$state_eg = false;
// Variable für Stockwerk setzten

if($state_1 == true && $state_2 == true)
{
$state_eg = true;
}
SetValue(45678, $state_eg);

Ansonsten wird es irgendwann nervig, bei mehreren Fenstern, zumal das 2. IF als solche unnötig ist.

Bin mir gerade unsicher, ob die hier geposteten Hilfestellungen das machen, was der Fragesteller will. Offen ist doch True, oder?

Aber egal, ein Grundsatz ist vorhanden, der mit der PHP Doku oder anderen Mitteln schnell angepasst werden kann.

Ja mal ehrlich, wenn man diesen wirklich leichten Punkt der Aufgabe nicht mit dem Ansatz hinbekommt, dann sollte man IPS wieder verkaufen.

Oder man hangelt sich wie leider auch einige seltene LangzeitUser ständig durch nerviges Fragen durchs Forum, ohne auch nur im Ansatz mal Eigeninitiative zu ergreifen.

Gesendet von iPhone XS mit Tapatalk

Naja ich kann das schon nachvollziehen, wenn man etwas neues angeschafft hat, dann möchte man damit auch loslegen und erste Erfolge sehen, die wenigsten lesen sich bei der Anschaffung eines neuen Produkts das Handbuch von vorne bis hinten durch. Aber genau deshalb finde ich so Einsteiger Webinare von IP-Symcon sehr sinnvoll, damit man schneller einen Einstieg bekommt. Hier sollten diese Webinare fortgesetzt werden und z.B. auch solche Fragestellungen in einem Webinar für Einsteiger aufgegriffen werden. Im Zweifelsfall kann ja IP-Symcon solche einfachen Fragestellungen mit Beispielen in der Dokumentation ergänzen. Am Schluss kommt man aber nicht darum herum im Zweifelsfall die ausführliche Dokumentation zu bemühen, dann ist es aber auch hilfreich wenn diese so gestaltet ist, das man das auf Anhieb nachvollziehen kann. Bei Ereignissen sollte z.B. die Dokumentation mal auf den aktuellen Stand gebracht werden, da sind noch Bilder der „alten“ Konsole drinnen, die irritieren z.B. jemand der das erste mal damit zu tun hat aber die Webkonsole nutzt.

Ich meine den Part der Logik.
Logische Verknüpfungen und Zusammenhänge lernt man in der Schule in Mathe.
Das einzige was ich nachlesen muss ist die Darstellung in PHP und das ist ein Klick in Google. Da muss man kein Programmierer sein.

PHP: Logische Operatoren - Manual

Gesendet von iPhone XS mit Tapatalk

Du kannst deine beiden Ansätze ganz ohne Skript lösen. Für die Energiesumme findest du im Module Store „Rechenmodule“. Das darin enthaltene „Rechenmodul“ ermöglicht es dir unter anderem eine Summe aus einer Menge von Variablen zu bilden, welche sich auch mit jeder Variablenaktualisierung aktualisiert.

Für deine Fenster kannst du die „Aktivliste“ verwenden. Diese zeigt von einer Variablenliste ausgehend alle an, welche „An“ sind, in deinem Fall also offen.

Hier nochmal in ordentlich mit „Kommentar“ (bei mir ist geschlossen immer TRUE :wink: )


// Status Fenster abrufen
$state_1 = GetValue(12345); // Fenster 1 - TRUE = Geschlossen
$state_2 = GetValue(23456); // Fenster 2 - TRUE = Geschlossen
$state_eg = false; //  TRUE = Geschlossen - Initialwert FALSE, also  offen.
// Variable für Stockwerk setzten

if($state_1 == true && $state_2 == true)  // Wenn alle (UND-Verknüft) Fenster geschlossen sind, melde TRUE , also alle geschlossen
{
$state_eg = true; 
}
SetValue(45678, $state_eg);  // Schreibe in Variable 45678 den Status - TRUE = Alles ZU, FALSE = mind. ein Fenster offen.

das kannst du auch ohne Script mit Ereignissen umsetzen.

Erzeuge eine Boole-Variable (Status EG)
Unter der Variable erzeugst du ein Ereignis das die Variable auf True schaltet wenn Fenster1 = true. Als erweiterte Bedingung fragst du alle anderen Fenster ab: Fenster2 = true etc.
Du musst allerdings für jedes Fenster ein Ereignis erstellen und jeweils die anderen Fenster als Bedingung abfragen. Ist ein bisschen Fleißarbeit bei vielen Fenstern :wink:

Viele Grüße
Stephan

Genau, dazu gab es auch hier im Forum schon einige Threads.

Fast alles dazu findet man hier => Boolean Variablen zusammenlegen.

Gruß Heiko

Zum einen hat er nach HIlfe für ein Script gefragt und zum anderen… hast du das mal mit einigen Fenstern gemacht und gepflegt … da ist das nicht wirklich eine Alternative… schon gar nicht wenn es am Verständnis für die Logik fehlt.