Brauche Denkanstoß bei Problem: Nutze ich rules, i.o. Broker oder was?

  • Hallo Gemeinde,

    ich brauche mal eure Hilfe bzw. Denkanstöße:


    Folgendes Scenario:

    Ich betreibe meine Smarte-Gartenbewässerung mit einem Sonoff SV mit aktueller Firmware(wie auf allen anderen Geräte auch). Ist seitlich bzw. im hinteren Teil es Garten verbaut. Die Rasenbewässerung wird in Tasmota mit sunset eingeschaltet. Desweiteren sind an meiner Terrasse Markissen angebracht, die abends um 22 Uhr schließen (dort hängen Shelly 2.5 mit Originalsoft dran). Auf der Terrasse wird ein RGBW Streifen betrieben (mit einem HE801 Wifi mit Tasmota).


    Nun soll folgendes umgesetzt werden:

    Der LED Stripe beleuchtet die Terrasse mit weißem Licht. Nun soll 10 Sekunden bevor der Rasensprenger angeht, der LED Stripe blau blinken oder scrollen und während des Betriebes der Bewässerung blau leuchten. Und / oder wenn abends die Markisen runtergehen, soll 10 sec vorher der Streifen rot blinken und für die Dauer des Betriebes der Markisen rot leuchten. Und danach sollte, wenn der Stripe weiß an war, der wieder weiß werden.


    Ich hoffe ihr habt verstanden, was ich meine. Wenn nicht, bitte nachfragen.


    Ich würde mich über Denkanstöße bis hin zu Lösungen über alles freuen.

    FB 7590 & 7240, < 20 x Sonoffs Basic, Dual, 4 Ch pro, T2 (alle Tasmota), 10 x Shelly jetzt 2.5;) (OriginalFW) als Rolladenschalter, 2 X Shelly Dimmer (OriginalFW), 8 x Shelly 1 (Tasmota), 3 x Sonoff SV (Tasmota) als smarte Gartenbewässerung und Garagentorsteuerung, 5 X FS 20 Heizungssteuerung mit Zimmerthermostat u. Fensterkontakten, 5 x IP-Camera, 1 x Frau ;), 1 x Tochter


    Mein Projekt: Smarte Gartenbewässerung

  • Ohne den Versuch erst überhaupt anzufangen, deine Programmierung mit rules abzubilden, denke ich, dass rules damit überfordert ist. Obwohl ich es nicht zu 100% ausschließen will, insbesondere mit den neuen Möglichkeiten der if ... then ... else-Programmierung. Das Stichwort heißt für mich bei einer solchen Anforderung: Kontrollstrukturen. Und das kannst mit jeder Skript fähigen Hausautomations-Software hinbekommen, also auch mit IOB. Mein Tip: Mach dir auf einem Blatt Papier einen Ablauf- und Abhängigkeitsplan, was wann in Abhängigkeit wovon passieren soll und welche Zustände währenddessen oder vorher oder nachher geprüft und/oder geändert werden müssen.

    Mit Worten ist es schnell beschrieben aber der Teufel steckt bei der Programmierung im Detail. Ob es mit Blockly geht, weiß ich nicht. Ich programmiere old school mit einer Text basierenden Entwicklungsumgebung (z. B. ATOM, VS Code, Idle). Damit würde man es auf jeden Fall hinbekommen. Vermutlich geht es mit Blockly innerhalb von IOB ganz gut, weil du "direkt" auf deine Objekte und ihre Zustände zugreifen kannst. Hast du denn schon IOB im Einsatz oder musst du dich darin noch einarbeiten?

  • Ich habe IOB installiert und kratze zur Zeit ein bisschen am Lack, bin also dabei mich einzuarbeiten. deswegen fange ich ja jetzt an, im Mom muss der Rasen ja noch nicht bewässert werden und wir sitzen noch nicht auf der Terrasse.


    An Blocky hatte ich auch schon gedacht. Für old school reichen meine Kenntnisse nicht aus.Obwohl ein wenig Quelltext anpassen kann ich schon.


    Deinen Tipp beherzige ich im allgemeinen auch schon.


    Mein Prob liegt z.B. darin 10sec vor dem Sunset die LED blinken lassen. Kann ich z.B. sagen 10 sec vor sunset mache diese Aktion?


    Aber schon mal danke für deinen ersten (von hoffentlich noch weiteren) Tipps

    FB 7590 & 7240, < 20 x Sonoffs Basic, Dual, 4 Ch pro, T2 (alle Tasmota), 10 x Shelly jetzt 2.5;) (OriginalFW) als Rolladenschalter, 2 X Shelly Dimmer (OriginalFW), 8 x Shelly 1 (Tasmota), 3 x Sonoff SV (Tasmota) als smarte Gartenbewässerung und Garagentorsteuerung, 5 X FS 20 Heizungssteuerung mit Zimmerthermostat u. Fensterkontakten, 5 x IP-Camera, 1 x Frau ;), 1 x Tochter


    Mein Projekt: Smarte Gartenbewässerung

  • An Blocky hatte ich auch schon gedacht. Für old school reichen meine Kenntnisse nicht aus.Obwohl ein wenig Quelltext anpassen kann ich schon.

    Das ist schon mal eine gute Voraussetzung. Also (wieder) nicht im Sinne einer fertigen Lösung sondern als möglicher Weg, wobei ich nicht weiß, welche Methoden und Funktionen Blockly anbietet:

    Über status 7 holst du dir die time-Informationen. Gib mal auf der Konsole eines Tasmota-Gerätes status 7 ein. Das sieht dann so aus (Achtung bei mir ist topic und Gerät getauscht, das ist nicht der Tasmota-MQTT-Standard und nur für mich gut und sinnvoll ;)):

    Code
    1. 07:32:59 MQT: Verbrauch-1/stat/STATUS7 = {"StatusTIM":{"UTC":"Tue Jan 14 06:32:59 2020","Local":"Tue Jan 14 07:32:59 2020","StartDST":"Sun Mar 29 02:00:00 2020","EndDST":"Sun Oct 25 02:00:00 2020","Timezone":"+01:00","Sunrise":"09:03","Sunset":"15:43"}}

    Es wird dir ein JSON-Ausdruck geliefert ({"StatusTIM":{ ... ... }}). Darin stecken auch die beiden Schlüssel "Sunrise" und "Sunset" mit den dazu gehörenden UTC-Zeitwerten.

    JSON ist eine feine Sache, weil die geschwungenen Klammern dem Ausdruck eine Struktur geben und der Inhalt des Ausdrucks aus Paaren von Schlüssel und Wer ("key" : "value") bestehen, wobei der value wiederum eine Ansammlung von Schlüssel-Wert-Paaren sein kann. (Siehe zu JSON und der Auswertung solcher Ausdrücke mein Artikel im Wiki).

    Ob IOB/Blockly eine Auswertungsmethode für JSON hat, weiß ich nicht.


    Strukturiert dargestellt sieht der JSON-Ausdruck von oben übrigens so aus:

    Du ziehst dir also den Wert von Sunset aus der status 7 -Meldung in eine Variable/Objekt. Nun kannst du mit den 15:43 im Skript (in der Variablen/Objekt) weiterarbeiten. Falls es von IOB/Blockly als Zeit-Objekt erkannt wird, kannst du mit Zeitberechnungsmethoden weiterarbeiten und das auf lokalen Zeit umrechnen: 15:43:00 + 01:00:00 - 00:00:10. Das Ergebnis wäre dann 16:42:50. Das wäre dann dein Trigger für das Anschalten der LED


    Wenn die Zeit 15:43 als string, also Ansammlung von lesbaren Zeichen identifiziert wird (wobei dann Ziffern auch "nur" Buchstaben sind), ist Umwandlungsarbeit angesagt. Zum Glück erkennen die meisten Skriptsprachen Ziffern in Strings durchaus als (berechenbare) Zahlen. Das musst du herausbekommen, ob IOB/Blockly das können. Wie auch immer...


    Ich hoffe diese Prinzip-Beschreibung hilft dir ein wenig weiter. Unten habe ich mal aufgeschrieben, wie es aussehen würde, wenn ich mit mosquitto_pub und mosquitto_sub mit anschließender Filterung durch jq einsetzen würde. mosquitto_pub und mosquitto_sub laufen in zwei Terminal-Fenstern. Noch eine Bemerkung: Je nach dem wie die Timezone bei dir auf den Geräten definiert ist, wird Sunset/Sunrise durchaus auch als local time geliefert.

  • Guten Morgen Jörg,


    danke für die sehr ausführliche Antwort. Ich glaube die bringt mich schon ein gutes Stück weiter. Werde versuchen dies mal umzusetzen.


    Vor allem das aufzeigen der Berechnung für die 10 sec war hilfreich. Unter anderem auch, weil ich nicht wusste, ob die Zeit auch die sec mit berücksichtigt und ich über sunset bzw. sunrise die "echte" zeit bekomme. Aber das scheint ja der Fall zu sein.


    (Achtung bei mir ist topic und Gerät getauscht, das ist nicht der Tasmota-MQTT-Standard und nur für mich gut und sinnvoll ;)):

    Also dazu muss ich mal sagen: Ich habe auch prefix und topic getauscht. Ich strukturiere damit meine Räume und Installationsorte in meinen Augen wesentliche "menschlicher" und für mich besser nachvollziehbar. Also nicht nur für dich gut und sinnvoll.8)

    FB 7590 & 7240, < 20 x Sonoffs Basic, Dual, 4 Ch pro, T2 (alle Tasmota), 10 x Shelly jetzt 2.5;) (OriginalFW) als Rolladenschalter, 2 X Shelly Dimmer (OriginalFW), 8 x Shelly 1 (Tasmota), 3 x Sonoff SV (Tasmota) als smarte Gartenbewässerung und Garagentorsteuerung, 5 X FS 20 Heizungssteuerung mit Zimmerthermostat u. Fensterkontakten, 5 x IP-Camera, 1 x Frau ;), 1 x Tochter


    Mein Projekt: Smarte Gartenbewässerung

  • Also dazu muss ich mal sagen: Ich habe auch prefix und topic getauscht. Ich strukturiere damit meine Räume und Installationsorte in meinen Augen wesentliche "menschlicher" und für mich besser nachvollziehbar. Also nicht nur für dich gut und sinnvoll.

    Genau! Ich finde das auch viel besser die Geräte als erstes über ihren Funktion-Name oder Raum-Namen anzusprechen und dann die weiteren Optionen cmd, tele oder stat auszuwählen.

    Zum Thema Sunset Wahrscheinlich ist der Sunset-Wert nur als String zunächst einmal auszulesen. Aber dann kann man ja an eine Zeit in der Form HH:MM, also z. B. 17:03 einfach ein :00 anhängen und hat mit 17:03:00 dann die Struktur HH:MM:SS.

  • ob die Zeit auch die sec mit berücksichtigt und ich über sunset bzw. sunrise die "echte" zeit bekomme

    Da fällt mir noch Folgende zu ein: Du hast für longitude und latitude die Geokoordinaten deines Wohnortes in der Firmware / in den Geräten hinterlegt? Sonst passt es nicht. Die Standardkoordinaten in den fertigen binaries sind recht weit im Westen!

  • Sind hinterlegt.....

    FB 7590 & 7240, < 20 x Sonoffs Basic, Dual, 4 Ch pro, T2 (alle Tasmota), 10 x Shelly jetzt 2.5;) (OriginalFW) als Rolladenschalter, 2 X Shelly Dimmer (OriginalFW), 8 x Shelly 1 (Tasmota), 3 x Sonoff SV (Tasmota) als smarte Gartenbewässerung und Garagentorsteuerung, 5 X FS 20 Heizungssteuerung mit Zimmerthermostat u. Fensterkontakten, 5 x IP-Camera, 1 x Frau ;), 1 x Tochter


    Mein Projekt: Smarte Gartenbewässerung