Kurze Frage noch, da du dich offenbar sehr gut auskennst, hast auch controlicz am laufen ? Damit soll man mit Alexa auch die Geräte in Domoticz steuern. Leider finde ich keinen Hinweis was genau in controlicz eingetragen werden muss. Sofern das bei die läuft wäre eine kurze Info nett.
Nein, kannte ich bisher nicht. Verstehe ich das richtig, ich gehe aus der China-Cloud und begebe mich in die Domoticz Cloud und anschließend auch noch in die Amazon-Cloud. Ich weiß, das machen viele hier in diesem Forum, aber ich verstehe es nicht... Aber ich helfe dir trotzdem, wenn ich kann (bei Alexa, Google Home und Siri usw. kann ich das ganz bestimmt nicht). Gruß Jörg
Mit Controlicz (Skill) wird es möglich die Aufträge in Domoticz auch mit Alexa zu steuern, somit ist für mich der Nachteil gegenüber IOBroker aufgehoben. Die Bedienung von Domoticz ist mir angenehmer als die von IOBroker, nutze derzeit aber beides. Werde heute mal versuchen mein Script zum TH16 zu erstellen. Controlicz läuft inzwischen bei mir.
ich dachte mit wert=$(curl -s http:/IP/cm?cmnd=power) erhalte ich in $wert ON oder OFF, klappt leider nicht. Haste du ein Tipp was ich da falsch mache?
Der Ansatz ist richtig, aber du bekommst einen mehr oder weniger umfangreichen json-String als Antwort, in diesem Fall {"POWER":"OFF"}. Diesen String musst du entweder filtern, dass nur noch ON oder OFF übrig bleiben oder die Antwort an grep weiterleiten (curl -s ... | grep ON) und dann eine logische Prüfung (if ... then ... else fi) machen nach dem Kriterium ON oder OFF. Beim filtern habe ich mit der Methode gearbeitet, dass man in Bash von vorne oder von hinten bis zum ersten oder bis zum letzten Vorkommen eines Zeichen alles löschen kann bzw. durch andere Zeichen ersetzen kann. In unserem Beispiel heißen die Regeln: Lösche alles von vorne bis zum ersten Doppelpunkt (einschließlich Doppelpunkt) Lösche alles von hinten bis zum ersten Anführungszeichen (einschließlich Anführungszeichen) Lösche alle Anführungszeichen - übrig bleibt dann nur noch ON oder OFF
Diese Methode habe ich in meinem Skript soncheck2.sh bzw. soncheck2a.sh häufig eingesetzt.
In meinem ersten Skript sonckeck, das nur Tasmota-Geräte im Netz sucht und deren Schaltzustand ermittelt, habe ich die logische Prüfung verwendet ($netz$ip steht bei mir für die IP-Nummer): if a=$(curl -s http://%24netz%24b%24i/cm?cmnd=power | grep -i 'Power = On'); then echo -e $netz$b$i ist AN\n" else echo -e $netz$b$i" ist AUS\n" fi; Erläuterung: Das Ergebnis von if.. ist immer ein logisch true (wahr) oder false (falsch). Ich rufe also die Antwort auf den Power-Befehl ab und übergebe das Ergebnis gleich an grep, mit dem Auftrag nachzuschauen, ob die Zeichenkette Power = On enthalten ist (Zeile 1). grep liefert unter anderem ein auswertbares true oder false. Dieses true oder false steckt nun in der Variablen a. Wenn das Ergebnis lautet: ja, ist enthalten, ist das true und es wird die nächste Zeile ausgeführt (Zeile 2). Wenn die Antwort false ist, wird die Zeile mit else ausgeführt.
Zu beachten ist, dass bei der Zeichen-suchen-und-löschen-Methode manche Zeichen maskierte werden müssen, weil sie programmiertechnische Funktionen haben, z. B. eine Leerstelle. Das geschieht üblicherweise durch einen vorangestellten Backlash \. Klammern habe oft programmiertechnische Funktion. Wenn ich jedoch das Schriftzeichen "geschweifte Klammer" suche, muss ich in der Regel \{ angeben, damit das Skript merkt, dass nicht die Klammer als Abgrenzung eine Programmier-Ausdrucks gemeint ist sondern das Schriftzeichen {. Auf diesen Seiten gibt es ein paar Erklärungen und ganz gute Beispiele: http://www.christian-hoenick.com/blog/2012/01/0…nen-teilstring/ und https://spielwiese.la-evento.com/xelasblog/arch…n-ersetzen.html Das im zweiten Beispiel angesprochene sed ist ein mächtiges aber auch komplexes Werkzeug zur Auswertung und Manipulation von Texctdateien nach regulären Ausdrücken. Ich bin allerdings immer ohne sed ausgekommen. Das führt dann zwar dazu, dass man sich Schritt für Schritt durch einen String arbeitet, aber es bleibt relativ transparent, was immer passiert.