Beiträge von JoergZ

    Unter Linux muss das Paket mosquitto-clients installiert sein. Für Windows findest du hier was https://mqtt.org/software/ unter dem Punkt Software -> Desktop-Tools. Weitere Informationen in meinem Wiki-Beitrag: MQTT - Eine Einführung. Vom Funktionsprinzip geht es so: Du schickst eine Nachricht an den MQTT-Broker. Die Nachricht besteht aus einem Topic (Gerät bzw. Dienst) und einer Message (Payload). Das kann ein einfaches Befehlswort sein wie "on" oder "off" oder ein JSON-Ausdruck wie "{key: value1, key2 : value2}". Um einen einzelnen Timer zu setzen, überträgst du einen Json Ausdruck wie

    {"Timer1":{"Enable":1,"Mode":0,"Time":"20:00","Window":0,"Days":"1111111","Repeat":1,"Output":1,"Action":1}}. Der MQTT-Broker schickt es dann weiter an das Gerät bzw. den Dienst auf dem Gerät.

    Denke daran, dass es das Topic Timers gibt, mit dem du alle Timer in einem Rutsch definieren kannst inklusive der Angabe, ob denn die Timer-Funktion überhaupt aktiviert werden soll und die Topics timer1 bis timer16, mit denen du einen einzelnen Timer beeinflusst, aber nicht die Grundfunktion. Schau es dir einfach in der Tasmota-Konsole an, welchen Output du bekommst, wenn du timers bzw. timer1 eingibst.

    Ich arbeite nicht mit FHEM und habe mir nur ein paar Bilder von FTUI3 angeschaut. Unwahrscheinlich, dass die Timersteuerung von Tasmota darin integriert ist. Du kennst die Webansicht für die Konfiguration der Timer? Da ist schon eine Menge einzustellen. Was auf jeden Fall geht, ist eine Timer-Definition per MQTT zu übertragen. Vielleicht ist es ja auch möglich in FTUI3 sich Webseiten anzeigen zu lassen. Dann könntest du das WebGUI von Tasmota aufrufen. Wäre zwar nicht elegant aber machbar ;-).

    Du wirst bestimmt Hilfe bekommen, wenn die Rulesspezialisten sehen, dass du dich wenigstens ein bisschen angestrengt hast und deine nicht zum Erfolg führenden Regeln hier postest. Wir verstehen uns als Hilfe zur Selbsthilfe. Das Wort Rules ist ein Link, der dir schon mal mit einfachen Beispielen (auf deutsch) weiterhilft. Ich bin nicht der Rulesspezialist, aber soweit ich das überblicke ist die Aufgabe durchaus lösbar.

    Wenn ich nicht ganz falsch liege (andere kennen sich mit Shelly besser aus) kann ein Shelly auch nur senden (MQTT publish oder (HTTP) websend) aber nicht empfangen oder abfragen (subscribe), es sei denn, das Gerät ist direkt hardwaremäßig am Shelly via GPIO angeschlossen. Dein Ziel lässt sich m. E. nur mit einem MQTT-Broker und Skripten (oder einer Hausautomationssoftware) auf einem weiteren Gerät z. B. einem Raspberry Pi erledigen

    Hhm... das scheint ein Fall für HoerMirAuf zu sein. Du kannst folgendes versuchen. (Hinweis: Das ist ein ganz übler Hack, weil er nicht mit Logik arbeitet sondern mit Zeitsteuerung). Unsicher dabei ist, wie oft der Schalter tatsächlich schaltet und evt. endet es auch in einer Endlosschleife, weil das Timing nicht passt, weil das erste delay zu lang oder es wird nur einmal geschaltet, weil das erste delay zu kurz ist. Bitte immer nur in einer-Schritten ändern.

    setoption34 0

    rule1 on Power1#state=1 do backlog Power1 3 ; BlinkTime 4; BlinkCount 2; delay 7; rule1 0; power1 0; delay 20; rule1 1; endon

    Zur Erklärung:

    setoption34 0 setzt die Standardverzögerungszeit bei Backlog-Befehlen von 200 ms auf 0

    das erste delay (delay 7) verzögert die folgenden Befehle um 0,7 Sekunden, damit das Relais zweimal schalten kann. Bei mir hat es bei 6 nur einmal geschaltet und bei 8 ist die rule in die Endlosschleife gekommen, weil die Deaktivierung (rule1 0) zu spät kommt. Nach zwei Sekunden wird die rule wieder aktiviert. Wie gesagt, ausprobieren oder warten bis premo oder HoerMirAuf eine bessere Idee haben. (Dann lerne ich auch wieder was.)

    Ein bisschen dich einarbeiten, musst du schon. Wir helfen gerne, aber verstehen es als Hilfe zur Selbsthilfe und - wie gesagt - ich kann eigentlich kein Javascript (aber die Programmierprinzipien sind zwischen manchen Sprachen doch sehr ähnlich.). Versuche es noch mal mit dieser Anleitung und vergleiche dabei die Namen aus der ganz oben stehenden ersten Zeile mit den Bezeichnungen, die später in der Funktion auftauchen. Dann kannst du verstehen, wie aus einem langen mit unterschiedlichen Klammern verschachteltem Ausdruck plötzlich ein in seine Einzelteile zerlegtes Objekt wird, bei dem man jedes einzelne Teil weiterverarbeiten. kann :

    JSON Parsen
    Im folgenden Script zeige ich Dir, wie ich eine JSON-Zeichenfolge parse. Folgende Zeichenfolge dient hier als Beispiel: {"name":"SensorOutdoor1",…
    www.smarthome-tricks.de

    Spannend ist der Teil unter Try. Dort kannst du das Prinzip erkennen:

    1. Aus dem input (erste Zeile ganz oben) zunächst ein Javascript-JSON Objekt machen objekt = JSON.parse(input) (in objekt steckt nun der Inhalt aus input aber in einer anderen Form, nämlich als Array)
    2. Das Objekt ist nun in seinen Teilelementen nutzbar: objekt.name hat den Inhalt "SensorOutdoor1", objekt.temp hat den Inhalt 4.5

    Ein bisschen tricky wird es an der Stelle, wo der Inhalt eines objekt.unterobjekt wiederum nicht ein einfacher String oder eine Zahl ist, sondern selbst wieder ein (assoziatives) Array, auf das man man dann mit objekt.unterobjekt.name oder objekt.unterobjekt[1] usw. zugreifen musst.


    Vielleicht hilft dir mein Beitrag aus dem Wiki, wo ich am Beispiel von jq versuche zu erklären, wie ein JSON-Ausdruck zerlegt wird. jg ist im Prinzip dasselbe wie JSON.parse() nur als eigenes Programm.

    Ich denke JSON.parse() ist dein Freund...

    Hier sind ein paar schöne Beispiele:

    How To Parse JSON with JSON.parse() JavaScript Function? – POFTUT


    Und zu HTTP-Request aus Javascript ist dies vielleicht hilfreich. Musst ein bisschen nach unten scrollen. Am Anfang het der Helfer wohl einen kleinen Fehler im Skript gehabt:

    [gelöst]Wie sende ich aus JavaScript einen HTTP Befehl
    @amg_666 sagte in Wie sende ich aus JavaScript einen HTTP Befehl:…
    forum.iobroker.net

    Sorry, mehr kann ich nicht helfen, bin Basher und Pythonier ;)

    Da gibt es innerhalb von JavaScript bestimmt elegantere Lösungen, denn wenn du den Http Request absetzt, bekommst als Antwort einen JSON-Ausdruck. Es gibt bestimmt ausprogrammierte JSON-Parser. Die gibt es eigentlich für jede Hochsprache.

    Etwas übersichtlicher wird es z. B. so:

    http://192.168.178.67/cm?cmnd=status%2010

    Das bringt schon einmal dieses Ergebnis:

    aber der Wert allein ist immer noch nicht isoliert.

    Oder unter Linux mit um den Wert von Today zu erhalten

    curl -s "http://192.168.178.XXX/cm?cmnd=status%2010" | jq .StatusSNS.ENERGY.Today


    curl und jq gibt es beides mittlerweile auch für Windows.