NEWS
Mediola Gateway Statusabfrage (States) umwandeln per Script
-
Hi,
ich hab ein Mediola Gateway und EnOcean Aktoren (Licht Rolladen usw.).
Primär gehts mir eigentl. aber ums Licht erst einmal.
Und zwar kann ich die die Aktoren auch per HTTP Request aus dem iobroker schalten, das funktioniert wunderbar.
Jetzt hätte ich allerdings gerne den aktuellen Status ebenfalls im iobroker, da wenn ich z.b. mit dem Tablet per iobroker das Licht Schalte,
aber jemand dann per Taster (EnOcean) wieder ausschaltet, bekommt das der iobroker ja nicht mit, da er den "Status" ja nicht kennt.Jetzt kann man aber per "GetStates" den Status aller Aktoren abfragen.
Das würde ich Zyklisch gerne machen wollen und dann den aktuellen Status je ID in einen Datenpunkt schreiben.Der Output von Getstates sieht folgendermassen aus:
{"XC_SUC":[{"type":"ENOCEAN","sid":"01","adr":"00000001","deviceProtocol":"normal","senderID":"FFAF2D81","virtual":false,"data":"eltako_dimmer","state":{"rssiPercentage":0,"timeout":false,"state":null,"level":null,"ramp_time":0,"lock":false}},{"type":"ENOCEAN","sid":"02","adr":"00000002","deviceProtocol":"normal","senderID":"FFAF2D82","virtual":false,"data":"eltako_dimmer","state":{"rssiPercentage":0,"timeout":false,"state":null,"level":null,"ramp_time":0,"lock":false}},{"type":"ENOCEAN","sid":"03","adr":"FFB6FD0E","deviceProtocol":"normal","senderID":"FFAF2D83","virtual":false,"data":"eltako_dimmer","state":{"rssiPercentage":71,"timeout":false,"state":"off","level":0,"ramp_time":0,"lock":false}},{"type":"ENOCEAN","sid":"04","adr":"FFB6FD0F","deviceProtocol":"normal","senderID":"FFAF2D84","virtual":false,"data":"eltako_dimmer","state":{"rssiPercentage":71,"timeout":false,"state":"off","level":0,"ramp_time":0,"lock":false}},{"type":"ENOCEAN","sid":"05","adr":"FFB6FD0B","deviceProtocol":"normal","senderID":"FFAF2D85","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":64,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"06","adr":"FFB6FD14","deviceProtocol":"normal","senderID":"FFAF2D86","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":66,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"07","adr":"FFB6FD13","deviceProtocol":"normal","senderID":"FFAF2D87","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":66,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"08","adr":"FFB6FD15","deviceProtocol":"normal","senderID":"FFAF2D88","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"09","adr":"FFB6FD16","deviceProtocol":"normal","senderID":"FFAF2D89","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":66,"pos":100,"sync":false,"rv":25,"rt":25,"lock":false}},{"type":"ENOCEAN","sid":"0A","adr":"FFB6FD1B","deviceProtocol":"normal","senderID":"FFAF2DA5","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":false,"rv":30,"rt":30,"lock":false}},{"type":"ENOCEAN","sid":"0B","adr":"FFB6FD06","deviceProtocol":"normal","senderID":"FFAF2D8B","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"on","lock":false}},{"type":"ENOCEAN","sid":"0C","adr":"FFB6FD26","deviceProtocol":"normal","senderID":"FFAF2D8C","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":66,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"0D","adr":"0000000D","deviceProtocol":"normal","senderID":"FFAF2D8D","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":0,"pos":0,"sync":false,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"0E","adr":"0000000E","deviceProtocol":"normal","senderID":"FFAF2D8E","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":0,"pos":0,"sync":false,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"0F","adr":"FFB6FD1F","deviceProtocol":"normal","senderID":"FFAF2D8F","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":66,"pos":99,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"10","adr":"FFB6FD20","deviceProtocol":"normal","senderID":"FFAF2D90","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"11","adr":"FFB6FD23","deviceProtocol":"normal","senderID":"FFAF2D91","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"12","adr":"FFB6FD21","deviceProtocol":"normal","senderID":"FFAF2D92","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"13","adr":"FFB6FD22","deviceProtocol":"normal","senderID":"FFAF2D93","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"14","adr":"FFB6FD0C","deviceProtocol":"normal","senderID":"FFAF2D94","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":66,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"15","adr":"FFB6FD25","deviceProtocol":"normal","senderID":"FFAF2D95","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"16","adr":"FFB6FD02","deviceProtocol":"normal","senderID":"FFAF2D96","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":73,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"17","adr":"FFB6FD18","deviceProtocol":"normal","senderID":"FFAF2D97","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":30,"rt":30,"lock":false}},{"type":"ENOCEAN","sid":"18","adr":"FFB6FD0A","deviceProtocol":"normal","senderID":"FFAF2D98","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"19","adr":"00000019","deviceProtocol":"normal","senderID":"FFAF2D99","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":0,"pos":0,"sync":false,"rv":200,"rt":200,"lock":false}},{"type":"ENOCEAN","sid":"1A","adr":"FFB6FD11","deviceProtocol":"normal","senderID":"FFAF2D9A","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":0,"sync":true,"rv":12,"rt":12,"lock":false}},{"type":"ENOCEAN","sid":"1B","adr":"FFB6FD12","deviceProtocol":"normal","senderID":"FFAF2D9B","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":12,"rt":12,"lock":false}},{"type":"ENOCEAN","sid":"1C","adr":"FFB6FD07","deviceProtocol":"normal","senderID":"FFAF2D9C","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"1D","adr":"FFB6FD27","deviceProtocol":"normal","senderID":"FFAF2D9D","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":0,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"1E","adr":"0000001E","deviceProtocol":"normal","senderID":"FFAF2D9E","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":0,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"1F","adr":"FFB6FD04","deviceProtocol":"normal","senderID":"FFAF2D9F","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":0,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"20","adr":"FFB6FD05","deviceProtocol":"normal","senderID":"FFAF2DA0","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":0,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"21","adr":"FFB6FD08","deviceProtocol":"normal","senderID":"FFAF2DA1","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":66,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"22","adr":"FFB6FD10","deviceProtocol":"normal","senderID":"FFAF2DA2","virtual":false,"data":"eltako_dimmer","state":{"rssiPercentage":71,"timeout":false,"state":"off","level":0,"ramp_time":0,"lock":false}},{"type":"ENOCEAN","sid":"23","adr":"FFB6FD0D","deviceProtocol":"normal","senderID":"FFAF2DA3","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":71,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"24","adr":"FFB6FD09","deviceProtocol":"normal","senderID":"FFAF2DA4","virtual":false,"data":"eltako_switch","state":{"rssiPercentage":59,"state":"off","lock":false}},{"type":"ENOCEAN","sid":"25","adr":"FFB6FD1E","deviceProtocol":"normal","senderID":"FFAF2DA6","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":30,"rt":30,"lock":false}},{"type":"ENOCEAN","sid":"26","adr":"FFB6FD17","deviceProtocol":"normal","senderID":"FFAF2DA7","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":66,"pos":100,"sync":true,"rv":25,"rt":25,"lock":false}},{"type":"ENOCEAN","sid":"27","adr":"FFB6FD19","deviceProtocol":"normal","senderID":"FFAF2DA8","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":true,"rv":30,"rt":30,"lock":false}},{"type":"ENOCEAN","sid":"28","adr":"FFB6FD1C","deviceProtocol":"normal","senderID":"FFAF2DA9","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":false,"rv":23,"rt":23,"lock":false}},{"type":"ENOCEAN","sid":"29","adr":"FFB6FD1D","deviceProtocol":"normal","senderID":"FFAF2DAA","virtual":false,"data":"eltako_blind","state":{"rssiPercentage":71,"pos":100,"sync":false,"rv":30,"rt":30,"lock":false}},{"type":"EVENT","adr":"01","state":"1"},{"type":"EVENT","adr":"02","state":"1"}]}
Sorry für die Optik des Codes, wenn mans im Texfile ganz breit zieht, sieht man dass da pro ID eine Zeile ist. Hier ist es ein Durcheinander leider und schlecht lesbar.
Kann man das irgendwie per Script filtern, z.b. ich nehme jetzt z.b. mal die Adresse "FFB6FD0B" das letzte "state":"off" ist ja der status (EIN/AUS), den ich gerne abfragen möchte. Kann man das irgendwie scripten dass ich die Statuse der gewünschten ID´s irgendwie rausschreiben kann in einen Datenpunkt im iobroker, den ich dann anderweitig wieder benutzen kann. True/False reicht da ja oder bei den Dimmern die Prozente z.b....
Ich bin da leider Scripttechnisch überfragt und mir fällt da auch mit Blockly nichts ein wie ich das filtern könnte? Wahrscheinlich geht das am besten per Javascript, aber da hab ich absolut keine Ahnung davon.
Ich stell mir das irgendwie so vor: If "FFB6FD0B" status = off write userdata.0/LampeXY=false , so in die Richtung. Nur halt absolut keine Ahnung wie, da man ja den ganzen unnützen Müll der da mit in der Liste ist auch irgendwie filtern muss.
Vielleicht hat jemand die Lösung oder zumindestens einen Ansatz den man ausarbeiten könnte?
-
@w0rschd sagte: mir fällt da auch mit Blockly nichts ein wie ich das filtern könnte?
Ansatz:
-
@paul53 Ok das ist wirklich schon mal ein Ansatz vielen Dank!!! Ich bekomme es damit wahrsch. nicht komplett hin aber ich fange mal an zu "basteln"
Wie bringe ich die Liste als Variable da rein?
Ich mache ja als erstes ein execute mit dem http get Befehl damit ich diese Liste aktuell bekomme als Antwort vom Mediola Gateway.
Diese will ich dann ja immer aktuell "Filtern" und die States setzen. Idealerweise zyklisch.
Welchen block muss ich benutzen damit der Output vom exec Befehl (also diese Liste dann) als Variable fürs Script verfügbar ist?
Das ist für mich noch "Neuland", ich versuch mich da aber rein zu fuchsen -
@w0rschd sagte: execute mit dem http get Befehl
Weshalb nicht mit request?
-
@w0rschd sagte: Idealerweise zyklisch.
Oberer Teil für alle 10 Sekunden:
Die Variable result muss genau so geschrieben werden.
-
@paul53 oh cool danke!! das klimper ich direkt mal rein und Teste mich ran.
Ja sorry ich meinte auch Request nicht Execute, hab ich grad gemerkt als ich mal anfangen wollte das zusammen zu bauen
-
@paul53 Ich habs zum Testen mal so gemacht
Dann müsste ich doch zumindestens was er als Variable in der Get_States_Liste hat als Telegram Nachricht bekommen oder?
Weil da kommt nichts.
Ich wollte es zum debuggen mal so testen damit ich sehe dass der Teil schon mal klappt. Und dann stück für Stück aufbauen. -
@w0rschd sagte: Get_States_Liste hat als Telegram Nachrich
Telegram kann wahrscheinlich nicht mit einem Array of objects umgehen, sondern benötigt Strings.
-
@paul53 ah ok... hab den Fehler vom Telegram aber auch schon, da muss noch ein erstelle Text aus... vor die Variable...
Dann kommt aber auch wie du schon vermutet hast nur (object) object in "endlosschleife" ^^
Nächste Frage, angenommen die Liste passt (was ich ja so wie ich dachte nicht überprüfen kann), kommt ja das mit dem Zählen. Er zählt die Kollumnen durch,
woher weiss er was der Trenner ist also : oder ;? Oder zählt er Zeilenweise?Was ich auch nicht ganz kapier, du aktualisierst objektid xy mit dem atribut state.state vom obj mit "on" als text, aber wenn dort z.b. off drin wäre, dann würde er trotzdem "on" in das objekt schreiben? Ich steh da grad aufm schlauch
-
@w0rschd sagte: da muss noch ein erstelle Text aus... vor die Variable
Das funktioniert nicht. Wandle es für Telegram in ein JSON:
-
@paul53 wie kann ich mir anschauen was der "Inhalt" von der Liste ist? Damit ich auch den späteren zusammenbau wann er was wählt besser verstehe?
-
@w0rschd sagte: wie kann ich mir anschauen was der "Inhalt" von der Liste ist?
Mit dem JSON-Viewer.
-
@paul53 ok, wie komm ich an die Liste dran? Die liegt als File auf dem iobroker System oder wie bekomm ich die Variable in den Json-Viewer? Vielleicht doof die Frage aber das ist mir noch nicht ganz klar.
-
@w0rschd sagte: wie bekomm ich die Variable in den Json-Viewer?
Mit Copy & Paste aus dem ersten Beitrag.
-
@paul53 achsooo du meintest meine Liste, das ist ja das Ergebnis wenn man den Request mit dem Browser macht.... damit komm ich ja noch klar.
Ich meinte im Blocky um zu prüfen ob der Request funktioniert und er das was zurück kommt auch in der Liste richtig hat, wollte ich um nachzuprüfen was in der Variable drin ist mir das per Telegram senden. So meinte ich das. Geht das irgendwie anderst zu prüfen was in der "Variable" drin steht und ob er den Request richtig übernommen hat?
Oder muss ich mich einfach drauf verlassen dass das halt so klappt hehe -
@w0rschd sagte: zu prüfen was in der "Variable" drin steht und ob er den Request richtig übernommen hat?
Ein Debug-Block in der Schleife gibt nacheinander die 42 Objekte aus.
-
@paul53 ok, so langsam klingelts
Ich habs jetzt mal so gemacht, nur SenderID gegen adr getauscht, da ich ja den Zustand vom Aktor, nicht den Lichtschalter oder was auch immer SenderID ist, abfragen will.
Aber er schreibt mir nichts in den Datenpunkt vom Bürolicht.
Wo hängt mein Hirn gerade? -
@paul53 Habs hinbekommen.
Vielen vielen Dank! Ohne deine Hilfe wär ich da niemals drauf gekommen, genial
-
@w0rschd sagte: schreibt mir nichts in den Datenpunkt vom Bürolicht.
Hat die Debug-Ausgabe funktioniert? Dann müsste "on" oder "off" in den Datenpunkt geschrieben werden.
-
@paul53 ja hat geklappt. Hatte Debug noch im Blockly an dann hat er nichts geschrieben, das hab ich dann gemerkt und ausgemacht und tadaaaa es ginge.
Habe mir jetzt schon mal Wohn-Esszimmer-Küche "programmiert" und das funktioniert alles prima, das war genau das was ich gesucht habe.Ich kanns nur nochmal wiederholen, Danke für deine Hilfe, ohne die hätte ich da gar nix verstanden, geschweige denn hinbekommen!