Einschaltverzögerung per auto-math.php

Überwachung der Solaranlage per eMail oder Pushover und Steuerung von Geräten mit Smart Home Zentralen. PV-Überschuss Steuerung verbunden mit Geräten und Tasmota Firmware. Wallbox Steuerungen und API Schnittstelle, über die Daten in die Solaranzeigen Datenbanken geschrieben und gelesen werden können. Alles, was man für Steuerungsaufgaben benötigt.

Moderator: Ulrich

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Einschaltverzögerung per auto-math.php

Beitrag von Kuschelmonschter »

Ich würde gerne eine Einschaltverzögerung realisieren. Das sollte über die auto-math.php möglich sein? Von PHP habe ich leider keine Ahnung...

Von der Logik her würde ich gerne sowas machen:

Code: Alles auswählen

$cnt = 0;

if ($Einspeisung > 3000) {
	$cnt++;
}
else {
	$cnt = 0;
}

if ($cnt > 5) {
	$UserKontaktAuswertung["Relais1"]["Kontakt1"] = 1;
else {
	$UserKontaktAuswertung["Relais1"]["Kontakt1"] = 0;
}
Sprich, wenn die Einspeisung 5 Zyklen lang höher als der definierte Wert ist, schalte das Relais ein. Das mit der $cnt Variable wird so aber voraussichtlich nicht funktionieren, weil diese wohl in jedem Zyklus neu initialisiert wird!? Man bräuchte hier wohl sowas wie eine statische oder globale Variable.

Wie ließe sich mein Vorhaben mit PHP realisieren?

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung

Beitrag von Kuschelmonschter »

Idee wäre eine statische Variable. Allerdings schaltet mir das folgende einfache Script das Relais schon einmal nicht:

Code: Alles auswählen

<?php

// PLC program to control an aroTHERM plus heatpump.
function arotherm_plc() {
	log_schreiben( "- - - - - - - - - -    arotherm_plc   - - - - - - - - -", "|-->", 1 );
	$UserKontaktAuswertung["Relais1"]["Kontakt1"] = 1;
}

log_schreiben( "- - - - - - - - - -    auto-math   - - - - - - - - -", "|-->", 1 );
arotherm_plc();
return;

?>
Über den Test-Button auf der Automations-Seite funktioniert die Ein- und Auschaltung problemlos. Das Relais klackert. Über obige auto-math.php wird das Relais nicht eingeschaltet.

Hier die Log-Ausgabe:

Code: Alles auswählen

23.04. 12:28:01 |--> - - - - - - - - - -    Start Automation   - - - - - - - - -
23.04. 12:28:02 ERRO Datenbank: solaranzeige Measurement: PV Bedingung:  -> Keine Daten vorhanden.
23.04. 12:28:02 INFO PV Leistung:  W
23.04. 12:28:02 ERRO Datenbank: solaranzeige Measurement: AC Bedingung:  -> Keine Daten vorhanden.
23.04. 12:28:02 INFO AC Leistung:  W
23.04. 12:28:02 ERRO Datenbank: solaranzeige Measurement: AC Bedingung:  -> Keine Daten vorhanden.
23.04. 12:28:02 INFO Bezug:  W
23.04. 12:28:02 INFO Einspeisung:  W
23.04. 12:28:02 ERRO Datenbank: solaranzeige Measurement: Batterie Bedingung:  -> Keine Daten vorhanden.
23.04. 12:28:02 INFO Kapazität:  %
23.04. 12:28:02 INFO Broker: Connection Accepted.
23.04. 12:28:02 |--> - - - - - - - - - -   auto-math   - - - - - - - - -
23.04. 12:28:02 |--> - - - - - - - - - -   arotherm_plc   - - - - - - - - -
23.04. 12:28:02 INFO Relais 1 ist aktiviert.
23.04. 12:28:03 INFO Topic: tele/Heatpump/LWT
23.04. 12:28:03 INFO Relais 1 Kontakt 1 ist ausgeschaltet
23.04. 12:28:03 INFO Broker disconnect erfolgreich.
23.04. 12:28:03 ENDE ---------------------------------------------------------
Ich glaube nicht, dass das am Docker-Image liegen kann!? Oder schaltet der prinzipiell nicht ein, wenn die Werte von der Anlage fehlen?


[EDIT]
Dem Log nach zu urteilen kommen wir in den folgenden if-Block der automation.web.php nicht hinein:

Code: Alles auswählen

    if (isset($UserKontaktAuswertung["Relais1"]["Kontakt1"]) and $UserKontaktAuswertung["Relais1"]["Kontakt1"] == 1) {
      $Relais1Kontakt1Auswertung = 1;
      log_schreiben( "Relais 1 Kontakt 1 wird jetzt durch Benutzer Berechnung eingeschaltet.", "", 2 );
    }

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung

Beitrag von Kuschelmonschter »

OK. Außerhalb der Funktion funktioniert das Schalten:

Code: Alles auswählen

<?php

$UserKontaktAuswertung["Relais1"]["Kontakt1"] = 1;
return;

?>
Das ist dann wohl ein Scope-Problem. Dann gebe ich den Wert wohl über die Funktion zurück und weise diesen dann außerhalb der Funktion zu. Ich habe gedacht, das UserKontaktAuswertung-Array wäre ein globales...

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung

Beitrag von Kuschelmonschter »

Den Zustand über eine statische Variable zu sichern hat nicht funktioniert, weil jeder Aufruf zu einer neuen Session gehört, weshalb die statische Variable immer neu initialisiert wird. Um einen Zustand zu speichern, verwende ich jetzt ein File:

Code: Alles auswählen

<?php

function toggle_plc() {

    $state = file_get_contents("/var/www/html/state");

    if ($state == 1)
        $state = 0;
    else
        $state = 1;

    file_put_contents("/var/www/html/state", $state);
    return $state;

}

$UserKontaktAuswertung["Relais1"]["Kontakt1"] = toggle_plc();
return;

?>
Evtl. macht es Sinn, das File unter /tmp zu speichern. Dann existiert es nur im RAM...

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung per auto-math.php

Beitrag von Kuschelmonschter »

Ich habe in der automation.php jetzt noch die Relais-Abfragen vor den auto-math.php Include gemacht, damit ich in meiner Steuerung Zugriff auf die Relais-Zustände ($Relais1Kontakte) habe. Wäre das nicht noch was für die offizielle Version?

Benutzeravatar
Ulrich
Administrator
Beiträge: 3563
Registriert: Sa 7. Nov 2015, 10:33
Wohnort: Essen
Hat sich bedankt: 59 Mal
Danksagung erhalten: 288 Mal
Kontaktdaten:

Re: Einschaltverzögerung per auto-math.php

Beitrag von Ulrich »

Bitte melde dich per eMail einmal: support at ...
--------------------------------------
Ulrich [Admin]

solarfanenrico
Beiträge: 622
Registriert: Mi 20. Jan 2021, 19:49
Hat sich bedankt: 30 Mal
Danksagung erhalten: 38 Mal

Re: Einschaltverzögerung per auto-math.php

Beitrag von solarfanenrico »

Kuschelmonschter hat geschrieben:
Sa 23. Apr 2022, 09:22
Ich würde gerne eine Einschaltverzögerung realisieren. Das sollte über die auto-math.php möglich sein?.....

Sprich, wenn die Einspeisung 5 Zyklen lang höher als der definierte Wert ist, schalte das Relais ein. Das mit der $cnt Variable wird so aber voraussichtlich nicht funktionieren, weil diese wohl in jedem Zyklus neu initialisiert wird!? Man bräuchte hier wohl sowas wie eine statische oder globale Variable.

Wie ließe sich mein Vorhaben mit PHP realisieren?
Hallo Kuschelmonschter,
ich hoffe ich habe durch die Kürzung des Zitats nicht vom Wesentlichen abgelenkt.
Dein Vorhaben funktioniert an wolkenlosen Tagen, oder mit einer überdimensionierten Anlage. Da wird aber die Verzögerung nicht gebraucht.

Falls Du aufmerksamer Leser im Forum bist, haben die meisten Nutzer eher ein Problem mit der zeitnahen Umsetzung ihrer Schaltvorgänge.
Mir erschliest sich der Sinn nach der Verzögerung nicht so richtig.
Das Ergebnis wird wie folgt aussehen. Ein Zyklus besteht in Normfall aus einer Minute. Du erwartest jetzt 5 mal in Folge einen Wert. Dieser wird erreicht, und die Schaltung erfolgt. Gerade jetzt ist der Wert jedoch nicht mehr da, und Dein Vorhaben erreicht genau das Gegeteil. Dieses evtl. 3 Minuten lang.

Aber die falsche Schaltung muß weiter arbeiten. Dieser Rythmus kann sich ständig ändern, und am Ende des Tages hast Du nicht gut gearbeitet.



Besser sind Wege, die optimalen Verbraucher zuzuschalten, und kurze Lesintervalle zu benutzen.

Enrico

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung per auto-math.php

Beitrag von Kuschelmonschter »

Eine Wärmepumpe ständig ein- und auszuschalten dürfte auch nicht förderlich sein. Aber die haben wahrscheinlich ihre eigene Hysterese.

Andere Sache ist, über Verzögerungszeiten mehrere Verbraucher hierarchisch zuzuschalten.

solarfanenrico
Beiträge: 622
Registriert: Mi 20. Jan 2021, 19:49
Hat sich bedankt: 30 Mal
Danksagung erhalten: 38 Mal

Re: Einschaltverzögerung per auto-math.php

Beitrag von solarfanenrico »

Kuschelmonschter hat geschrieben:
Mo 25. Apr 2022, 08:57
Eine Wärmepumpe ständig ein- und auszuschalten dürfte auch nicht förderlich sein. Aber die haben wahrscheinlich ihre eigene Hysterese.

Andere Sache ist, über Verzögerungszeiten mehrere Verbraucher hierarchisch zuzuschalten.
richtig mit der Wärmepumpe.
hier habe ich eine SchwimbadWP im Einsatz. Diese läuft in Abhängigkeit der Poolpumpe und ist damit aus der Solarsteuerung raus.
Meine Prioritäten in der Zuschaltung der anderen Verbraucher, habe ich durch die mehrfach automation(n).php mit folge-files gelöst und lasse die in einem shell-sript als Stapeldatei ablaufen.
Dadurch ist gewährleistet, das sie Nacheinander und je nach "sleep" zeitverzögert, aber dennoch im derzeit 10, 20, 30 Sekunden-Intervall ausgeführt werden. Die richtigen Parameter in den Automationen lassen letzlich die passende Infrarot-Platte, bzw. PufferHeizstab zugeschalten.

Vor dieser Lösung waren oft alle gleichzeitig an und aus , und ich mußte immer händisch einen trennen, damit sich die Lage stabilisiert.

Enrico

Online
Kuschelmonschter
Beiträge: 37
Registriert: So 23. Jan 2022, 20:38
Danksagung erhalten: 1 Mal

Re: Einschaltverzögerung per auto-math.php

Beitrag von Kuschelmonschter »

Auch nicht blöd. Danke für den Tipp!

Antworten