Beiträge von Hberger
-
-
So ... hat mich jetzt doch noch interessiert wie es mit Tasmota schön zu lösen ist. Vielleicht interessiert ja jemanden.
Mit fetch, das ja XMLHttpRequest ablöst, hier nun ein Beispiel wie man den Response erhält und auswertet.
Allerdings muss für fetch in Tasmota CORS freigegeben werden.
In der Konsole, für alle Locations:
CORS *
HTML:
- Beispiel IP ist 192.168.1.170
- der geparste output für Power steht in der Variablen PowerStatus.Power (.POWER stell den Pararmeter dar der geparst wird)
- Ausgabe erfolgt im Beispiel als PopupFenster
HTML
Alles anzeigen<!DOCTYPE html> <html> <head> <title>Get Fetch-Request</title> </head> <body> <script> window.onload = function(){ fetch('http://192.168.1.170/cm?cmnd=power').then(function(response) { response.text().then(function(text) { const PowerStatus = JSON.parse(text); alert(PowerStatus.POWER); }); }); }; </script> </body> </html>
Vielen herzlichen Dank; Es funktioniert tadellos. Habe es auch für andere responses probiert und super !!
-
Ich kann zwar kein Java nur ein bisschen Python, bin aber sicher, dass es unter Java ähnlich geht:
Schicke das Statement http://IP.../cm?cmnd=status an das Gerät. Die Antwort ist ein JSON-String in der Form
Code{"Status":{"Module":1,"DeviceName":"Schalter","FriendlyName":["Schalter"],"Topic":"Schalter","ButtonTopic":"0","Power":0,"PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0}}
Mit einem entsprechende JSON Parser fischt du dir den Wert von Status['Power'] raus und weist in einer Variablen zu. In der steht entweder 0 (aus) oder 1 (an). Damit kannst du weiter arbeiten.
Hier mal ein Auszug aus meinem Code für mein daily backup; etwas gekürzt und die privaten Daten anonymisiert
Ohne try/except, aber das kann man einbauen. So schon lauffähig, wenn Mem1 und Mem2 gesetzt sind.
Code
Alles anzeigen# importing the requests library import requests import json #### Config #### IP =["2","3","4","5"] URL_base = "http://192.168.xxx." ################# URL=[] r=[] data=[] for ip in IP: del URL[:] URL.append(URL_base + ip + "/cm?cmnd=FriendlyName") URL.append(URL_base + ip + "/cm?cmnd=mem1") URL.append(URL_base + ip + "/cm?cmnd=EnergyReset") URL.append(URL_base + ip + "/cm?cmnd=mem2") # sending get request and saving the response as response object del r[:] r.append(requests.get(url = URL[0])) r.append(requests.get(url = URL[1])) r.append(requests.get(url = URL[2])) r.append(requests.get(url = URL[3])) # extracting data in json format del data[:] data.append(r[0].json()) data.append(r[1].json()) data.append(r[2].json()) data.append(r[3].json()) # printing the output print("") print ("Gerät: " + data[0]["FriendlyName1"]) print("Tageswert: " + str (data[2]["EnergyReset"]["Today"] )) print("Gesamt: " + str (data[2]["EnergyReset"]["Total"] )) print("Maximale Wattzahl: " + data[1]["Mem1"]) print("Max. Tageswert: " + str (data[3]["Mem2"] )) print("")
-
Also ich mache es wie Jörg und lese das ganze in ein Python JSON Objekt ein und nutze dann einen Standardparser und fische den Wert raus.
Beispielcode dazu hab ich mir ergoogelt und mich Rrangetastet. Bin auch kein erfahrener Python Programmierer
-
Hi
Ich hab das etwas anders, aber für mich ausreichend gelöst. Ich lese meine ja per Python und reagiere einfach dann auf die exception des try/exception Bereichs.
Wie gesagt, für mich ausreichend da ich damit dann auch Telegram-Alarm trigger
-
Hallo
Es gibt die Möglichkeit über Skript oder Konsole ein tempOffset zu setzen. Entweder ab 8.2 oder 8.3 verfügbar. Müsste nochmals in den Change Log gucken
-
Vielen Dank. Das hilft mir weiter. Danke
-
Hallo,
kann mir jemand bei einer Regel helfen, dass nach einem manuellen Power on (an S20), diese nach 1h wieder automatisch power off macht?
Danke
-
Ah okay. Danke. Ich werde Mal schauen
-
Guten Abend
Wollte die Frage nochmals nach oben stellen, vielleicht hat jemand eine Info für mich ☺️
Danke
-
Hallo,
ich habe auf Github einiges an Diskussionen gelesen, dass eine Integration von Telegram angefragt wurde.
Steht da konkret schon etwas auf der Roadmap dazu?
Danke
-
Ist ja keine grosse Sache, wenn es nicht an Board ist. Ist halt wirklich der aussagekräftige wert 👍🤓
-
Hi
Danke dir.
Ich habe jetzt eine kleine Funktion in python geschrieben 👍🙂
-
Hallo
Wird für einen BME280 auch die absolute Feuchte durch tasmota ausgegeben?
Ich habe dazu nix weitergehendes gefunden.
Wenn nicht, dann rechne ich es seitens Python selbst um
Danke
-
Hallo, super und vielen Dank. Ich hoffe, dass Du da meine Rückfrage verstehst, da Leerzeichen immer mal wieder
Problem machen "können"
-
Verzeih, ich habe es unklar formuliert. Mein Fehler.
Ich bezog mich auf die obigen Eingabe per Console und da können ja Leerzeichen durchaus kritisch sein,
da sie als Trenner gedeutet werden könnten. Danke
-
Hallo
wie gebe ich die SSID ein, wenn darin sich ein Leerzeichen befindet? Danke schonmal vorab.
-
Danke. Das klingt sehr hilfreich. Das nutze ich und wenn nicht, geht immer noch der harte weg 😎
-
auf DHCP lassen und zweite SSID und PW eintragen. Dann gehen Sie in beiden Netzen ohne Probleme.
Ja, danke euch für die Antworten
-
Danke dir
Der von der dir beschriebe zweite weg ist der facto der über hardreset. Ich richte es dann neu ein und installiere/aktiviere die Scripts nochmals neu. Ist der sicherste und wohl doch schnellste🙂