NEWS
blockly eleganter machen
-
Hi,
hat vielleicht jemand eine Info für mich, ob das eleganter mit einer Schleife, Liste etc. zu handeln ist. meine Script werden immer länger und wiederholen sich dabei mehr oder weniger x-mal.
in dem Blockly prüfe ich ob meine Shelly online sind.
ich trägere auf jeden Shelly und reagiere dann immer im gleichen Format, zähle den Wert hoch und schreibe den Namen auf und das ganze bald -> 20xwie kann ich dass den "variabler/flexiler" gestalten. Am liebsten würde ich sagen, ab hier
shelly.0
und alles was da drunter ist.
ich hab jetzt nach schleifen und Listen gegoogelt, aber die Beispiele kann ich irgendwie nicht mit meiner Anforderung abbilden...
Bin für "Nachhilfe" sehr dankbar.
-
Ich nutze zwar kein blockly sondern Node-Red - aber in diesem Fall ist die Logik Maschine leider nicht die Wurzel des Übels. (Du kannst zwar wie unten beschrieben eine Liste in einem eigen Datenpunkt definieren und dann via Schleife in einem Blockly durchgehen, aber schöner wäre es wenn man mit Wildcards arbeiten könnte).
Im Prinzip hat iobroker das Problem, dass Du wahrscheinlich mit blockly und auch mit den Node-Red iobroker Nodes immer nur einzelne Nodes abfragen kannst.
Ich habe das im Forum schon mal versucht zu thematisieren: https://forum.iobroker.net/topic/36470/node-red-und-iobroker-mqtt-watch-dog-funktion/2
Das Problem ist, dass Du weder mit Blockly (???? da kenn ich mich zu wenig aus) noch mit Node-Red mit Wildcards als Trigger arbeiten kannst. Falls Du mit Blockly mit Wildcards arbeiten kannst - wäre das die eleganteste Lösung.
Da ich mich mit blockly aber nicht auskenne, habe ich mir mit mqtt beholfen und überwache so meine Shellies .
Über mqtt überwache ich alle Shellies mit dem Pfad: shellies/+/online also einem einzigen Befehl.Sollte also nur ein Shelly seinen Status ändern wird ein trigger erzeugt.
So eine Watch-Dog Funktion gibt es aber mE in iobroker leider (noch ) nicht, um mit mehreren Datenpunkten aufeinmal einen Trigger auszulösen. Oder geht das mit Blockly????
Falls nicht kann man ggf. einen mqtt broker zu nutzen und falls Du den Shelly Adapter nutzt diese Werte an einen mqtt broker weitergibst oder eben direkt auf mqtt switchst.
Das macht aber auch nur Sinn, wenn man dann wiederum mit Blockly direkt auf einen mqtt-Broker zugreifen kann.?So habe ich mir dann eine Übersicht über Status und die wichtigsten Befehle in meinem persönlichen View zu den Shellies zusammengestellt.
Nach der IP-Adresse haben die Symbole folgende Bedeutung:
1- eventuelles Firmware Update
2- Neustart des Shellies
3- Öffnen des Shellies im Browser
4- Status Ein/Ausgeschaltet
5- Offline oder Online (Linkstatus)Diese anderen Parameter habe ich aber nur dadurch erreicht in dem ich mir zu den Schaltern eine eigene Alias Struktur gebildet habe, die sofern es die Infos der Hersteller hergeben. Soweit ich Dich aber verstanden habe, ist der Link-Status (rot markiert) das, was Dich interessiert.
Im Prinzip kannst Du natürlich auch einen Datenpunkt unter userdata als Objekt/Liste definieren und den dann mit einer Schleife durchzählen. Ist immerhin eine Abhilfe - aber schön ist halt anders.
-
-
@mickym Hm, ich sehe da einen Shelly mit gleicher IP und verschiedenen Namen. Kommt das durch Alias?
-
@Meister-Mopper Nein das ist ein Shelly 2.5 - das ist ein Gerät mit 2 Kanälen. Deshalb gleiche IP.
-
@Ahnungsbefreit Na super - dann wäre das aber doch die Lösung - wenn Blockly mit Wildcards arbeiten kann und Du anhand des konkreten Pfades dann analysierst von welchem Gerät eine Meldung kommt. Eventuell braucht man dann eine Liste nur noch zu Initialisierung - aber man triggert nicht mehr auf Zeit, was auch resourcenschonender ist.
-
-
@Ahnungsbefreit Ja genau - so meinte ich das. Mein Screenshot kannst nicht verwenden, da kein Shelly Adapter - aber das Prinzip ist genauso wie Du beschrieben hast und meines Erachtens umgesetzt hast. Die Frage ist quasi nur noch, ob man die Schleife zu initialisierung einmal vorher durchlaufen lässt für eine ggf. vorhandene visualisierung, aber das muss @dos1973 selbst beantworten.
-
@Ahnungsbefreit
ich probiere das gleich mal aus... -
ich habe das mal nachgebaut
12:57:54.260 info javascript.0 (457) script.js.1_Überwachung_Wohnung.shelly_test: ID: ist offline
aber die "ID" wird nicht aufgelöst?
-
@dos1973 "varShellyID" und "varWert" sind falsch. Geh auf "Trigger", da gibt es den roten kleinen Block "ObjectID" und wenn Du auf den Pfeil klickst, kommen mehr Optionen:
-
Das ist ja sehr praktisch.
So könnte ich doch dann auch die Batteriezustände aller HomematicIP Geräte auf einmal überwachen oder? -
ahh ok, habs, dachte das wären variablen.
das ist schonmal richtig cool13:08:41.243 info javascript.0 (457) script.js.1_Überwachung_Wohnung.shelly_test: ID: shelly.0.SHPLG-S#020570#1.online ist online
aber wie kann ich dem denn jetzt den Namen zuordnen?
-
@David-G Ja klar! Wobei es für diesen Zweck schon ein fertiges Script hier im Forum gibt, das nicht nur mit Homematic arbeitet und das Ergebnis auch visualisiert. Einfach mal nach Batterie Script suchen...
-
@dos1973 Probier mal so:
oder evtl. ein anderer Eintrag aus dem Menü, einfach mal versuchen...
-
-
mit "KanalName" gehts.
javascript.0 (457) script.js.1_Überwachung_Wohnung.shelly_test: ID: PlugS-Föhn ist online
-
@dos1973 Sehr schön, also ist Blockly doch nicht so unelegant
Wenn ich Dir helfen konnte, darfst Du meinen Lösungsvorschlag gerne über die kleinen Pfeile rechts unten "upvoten"...
-
Danke Dir!
bin begeistert... ich bau mal mein Script von gestern mit den 20 fachen Wiederholung um... Ich komme bestimmt nochmal -
@Ahnungsbefreit sagte in blockly eleganter machen:
@dos1973 Sehr schön, also ist Blockly doch nicht so unelegant
Habe ich ja nicht behauptet - hab gesagt, dass ich mich mit Blockly nicht auskenne - aber halt mit anderen Mitteln so einen Lösungsansatz gewählt habe. . Aber ist doch super, wie Du hier mit dem Lösungsansatz das Ganze in die richtigen Bahnen gelenkt hast. Vielen Dank auch von mir!