Receiver auto on/off via openHAB

Antworten
farout
Beiträge: 84
Registriert: Mo 9. Apr 2018, 22:17

Receiver auto on/off via openHAB

Beitrag von farout »

Hallo zusammen,

leider fährt mein Coolstream Tank hin und wieder nicht komplett hoch.
Er bleibt dann immer bei "Starting..." im Display stehen.

Nun habe ich mir mittels einem Shelly PlugS Zwischenstecker und openHAB einen kleinen Workaround gebaut:

Der Ablauf:
Der Coolstream wird über den Shelly Zwischenstecker eingeschaltet.
Sollte der Coolstream nicht komplett hochfahren wird nach 180s wieder abgeschaltet und nach 10s wieder ein.
Es gibt max. 3 Versuche dann wird abgebrochen und nicht weiter versucht einzuschalten.
Ist dies der Fall bekomme ich eine Nachricht aufs mobile Endgerät.
In aller Regel fährt jedoch der Coolstream beim zweiten Versuch komplett hoch.

Welche Hardware benötigt ?

openHab auf einem Raspi 3b+
Shelly PlugS Zwischenstecker (quasi ein Relais mit Wlan)

Der Rest ist Software :)

Zunächst muss ja openHAB mitbekommen ob der Coolstream überhaupt komplett hochgefahren ist oder nicht.
Hierzu habe ich ein Perl Script welches mir die Uhrzeit vom Coolstream holt wenn er komplett hochgefahren ist:

gettime.pl:

Code: Alles auswählen

#!/usr/bin/perl

$boxcall = `curl -s http://192.168.2.116/control/gettime`;

if ($boxcall =~ /^\d{2}:\d{2}:\d{2}/) {
    print $boxcall;
} else {
    print "offline";
}
Dieses Script wird alle 60s von openHAB aufgerufen.
Hierzu muss man den Aufruf als "thing" in openHAB definieren.

exec.things:

Code: Alles auswählen

Thing exec:command:gettime    [command="/etc/openhab2/scripts/./gettime.pl", interval=60, timeout=5] // Coolstream hole aktuelle Uhrzeit
Der Output dieses Scripts, also die aktuelle Uhrzeit im Coolstream, wird dann in ein Item "CoolstreamTime" geschrieben

coolstream.items:

Code: Alles auswählen

String    CoolstreamTime            "Coolstream Tank Uhrzeit: [%s]"                {channel="exec:command:gettime:output"}
Damit openHAB den Shelly Zwischenstecker ansprechen kann muss hierzu auch ein Item definiert werden:
shelly.items:

Code: Alles auswählen

Switch           ShellyPlugS_06  "Shelly SAT [%s]"   <poweroutlet>   {http=">[ON:POST:http://192.168.2.46/relay/0?turn=on] >[OFF:POST:http://192.168.2.46/relay/0?turn=off]"}
Damit ich diese Automatik auch aktivieren und deaktivieren kann braucht es noch ein zusätzliches "Schalter" Item:

Code: Alles auswählen

Switch    Coolstream_Autorestart    "Coolstream Autorestart [%s]"      <switch>
So und nun das eigentliches Programm bzw. "Rules" wird das in openHAB genannt:

Code: Alles auswählen

// https://openhabforum.de/viewtopic.php?f=13&t=4190&start=10
// globale Variablen zu Beginn der Datei definieren
var Timer tCheck = null                                                     // Timer für Receivercheck
var Integer iTry = 1                                                        // Zähler Startversuche

rule "Satreceiver Startup Check"
when
    Item ShellyPlugS_06 changed to ON                                       // SAT eingeschaltet
then
    if (Coolstream_Autorestart.state!=ON) {                                 // Wenn Autorestart nicht an, Abbruch
    logInfo("satreceiver","Coolstream Autorestart nicht Aktiv, Abbruch.")
        return;
    }
    //if (ShellyPlugS_05_Proxy.state!=ON) {                                   // Wenn Denon nicht an, Abbruch
    //logInfo("satreceiver","Denon noch nicht eingeschaltet, Abbruch.")
    //    return;
    //}
    logInfo("satreceiver","Coolstream eingeschaltet, warte auf hochfahren.")
    if(tCheck !== null)                                                      // Timer läuft bereits
        return;                                                              // also Abbruch
    iTry = 1                                                                 // Zähler initialisieren
    tCheck = createTimer(now.plusSeconds(180), [|                            // lege Timer an
        if(ShellyPlugS_06.state==ON && Coolstream_Autorestart.state==ON)  {  // Falls Receiver An und Autorestart Ein
            if(CoolstreamTime.toString.contains("offline")){                 // Falls Offline
                iTry = iTry + 1                                              // Zähler erhöhen
                logInfo("satreceiver","Coolstream offline, schalte aus.")
                logInfo("satreceiver","{}. Versuch in 10 Sekunden.",iTry)
                ShellyPlugS_06.sendCommand(OFF)                              // Receiver OFF
                tCheck.reschedule(now.plusSeconds(10))                       // und in 10 Sekunden einschalten
            } else {                                                         // Falls Online
                tCheck = null                                                // Timer löschen
            }
        } else if(iTry < 4){                                                 // Falls Receiver Aus und noch nicht Maximum erreicht
            ShellyPlugS_06.sendCommand(ON)                                   // Receiver ON
            logInfo("satreceiver","Coolstream {}. Startversuch.",iTry)
            tCheck.reschedule(now.plusSeconds(180))                          // und in 180 Sekunden erneut prüfen
        } else {
            logWarn("satreceiver","Coolstream: Kein weiterer Startversuch!")
            sendBroadcastNotification("Satreceiver Startup: Coolstream ist nicht sauber hochgefahren" + " um " + now.toString("HH:mm") + " Uhr") //Allgemeine Warnung an alle 
            tCheck = null                                                    // Timer löschen
        }
    ])
end
Viel Spass damit!
Antworten

Zurück zu „Apollo (TANK)“