Posts by gwaag
-
-
hyle, Danke, ist ein Kopierfehler, ich habe 2 Raspberrys einer den ich selber aufgesetzt habe und einen den ich von Solaranzeige.de habe.
Bei meinen kann ich in crontab copy past machen , bei dem von Solaranzeige nicht, daher der Fehler, musste es abtippen.
..
@_blackjack_
Vielen Dank für Deine Mühe alles zu Erklären und sogar einen code zu schreiben.
Um das alles zu verstehen muss ich es erst mal absacken lassen und mehrfach lesen/studieren.Ich ü66 brauche da etwas mehr Zeit, da ich das mit den Raspberrys ja nur als Hobby mache. Und ja, Du hast natürlich Recht, vieles ist aus dem Internet copy past und von mir angepasst.
Nochmals Vielen Dank.
Gruss
gwaag
-
Danke, keepferar, für die Erklärungen, werde es so korrigieren.
z.B. timewindow1 = (9*60+0) <= Now < (16*60+0) ist ein Zeitfenster zwischen 9.00h und 16.00h
oder timewindow1 = (9*60+15) <= Now < (16*60+22) ist ein Zeitfenster zwischen 9.15h und 16.22h
Das habe ich mal irgendwo gefunden und brauche es jetzt so wie es da steht, funktioniert sehr gut.
-
@Denis89
die 2 scripts starten mit einer systemd unit.
@_blackjack_
Habe jetzt die while True: sleep(30) entfernt, alle Zeilen 4 nach links geschoben, das logging für beide Werte (Temp und Watt) sind jetzt in einem script.
in crontab -e habe ich das script mit den Temp und Watt loggen alle 20 sec. aufgerufen und das Resultat ist jetzt viel besser, für mich ok:
Kannst Du bitte in meinem script ein Beispiel zeigen was nicht gut ist mit der Leerzeichensetzung und das mit den öffnenden Klammern?
Vielen Dank, dann werde ich das noch korrigieren.
Unübersicht, hat keepfear in #36 schon bemängelt.....
Code
Display MoreWoche 45 Sa 12.11.2022 07:00:03 Temp: 20.87 Woche 45 Sa 12.11.2022 07:00:03 Watt: 505.46 Woche 45 Sa 12.11.2022 07:00:03 SG-Ready bit1 aus 7:00h Woche 45 Sa 12.11.2022 07:00:04 SG-Ready bit2 aus 7:00h Woche 45 Sa 12.11.2022 07:00:22 Temp: 20.87 Woche 45 Sa 12.11.2022 07:00:22 Watt: 497.87 Woche 45 Sa 12.11.2022 07:00:23 SG-Ready bit1 aus 7:00h Woche 45 Sa 12.11.2022 07:00:24 SG-Ready bit2 aus 7:00h Woche 45 Sa 12.11.2022 07:00:43 Temp: 20.87 Woche 45 Sa 12.11.2022 07:00:43 Watt: 490.96 Woche 45 Sa 12.11.2022 07:00:43 SG-Ready bit1 aus 7:00h Woche 45 Sa 12.11.2022 07:00:44 SG-Ready bit2 aus 7:00h Woche 45 Sa 12.11.2022 07:01:04 Temp: 20.87 Woche 45 Sa 12.11.2022 07:01:04 Watt: 505.67 Woche 45 Sa 12.11.2022 07:01:23 Temp: 20.87 Woche 45 Sa 12.11.2022 07:01:23 Watt: 491.56 Woche 45 Sa 12.11.2022 07:01:43 Temp: 20.87 Woche 45 Sa 12.11.2022 07:01:43 Watt: 493.43 Woche 45 Sa 12.11.2022 07:02:04 Temp: 20.87
crontab alle 20 sec
-
Dennis89 Guter Tipp mit dem subprocess.
Habe jetzt all anderen scripts gesichert und dann geloescht und nur noch die am laufen:
Alles mit subprocess mit # versehen, d.h. jetzt sind nur noch diese 2 script aktive und schreiben beide auf ms.log:
script, SG-Ready.py
Python
Display More#!/usr/bin/env python3 import json import requests import logging import locale import datetime from datetime import datetime import http.client import time from time import sleep from influxdb import InfluxDBClient while True: sleep(30) locale.setlocale(locale.LC_ALL, 'de_DE.utf8') logging.basicConfig(filename='/home/pi/th/ms.log', format='%(asctime)s %(message)s', datefmt="Woche %V %a %d.%m.%Y %H:%M:%S", level=logging.INFO) # Zeitfenster now = datetime.now() Now = now.hour * 60 + now.minute timewindow1 = (9*60+0) <= Now < (16*60+0) # ein timewindow2 = (16*60+1) <= Now < (17*60+1) # aus timewindow3 = (20*60+0) <= Now < (23*60+0) # ein Nachtbooster timewindow4 = (23*60+1) <= Now < (23*60+2) # aus Nachtbooster timewindow5 = (23*60+5) <= Now < (23*60+6) # ein Nachtabsenkung timewindow6 = (7*60+0) <= Now < (7*60+1) # aus Nachtabsenkung # Periode Winter oder Sommer monat = datetime.now().month sommer = monat >= 3 and monat <= 9 winter = not (sommer) # Enspeisung Influx auslesen client = InfluxDBClient(host='192.168.0.29', port=8086) # ip oder localhost client.switch_database('zaehler') results = client.query('SELECT "Gesamtleistung" FROM "AC" GROUP BY * ORDER BY DESC LIMIT 1') points = results.get_points point = 0 for point in points(): shelly_eks = point['Gesamtleistung'] einspeisung = shelly_eks # Raumtemperatur auslesen (Wohnzimmer west / Controme) response = requests.get("http://192.168.0.23/get/json/v1/1/temps/") obj = response.json() for raum in obj[0]["raeume"]: if raum ["name"] == "Wohnen west": if raum ["sensoren"][1]["wert"]: print(raum["sensoren"][1]["wert"]) logging.info("Temp: %.2f", raum ["sensoren"][1]["wert"]) # Logeintrag zu_kalt = raum ["sensoren"][1]["wert"]<= 20.5 zu_warm = raum ["sensoren"][1]["wert"]>= 21.5 # Shel1y WP_Verbrauch auslesen response = requests.get("http://192.168.0.140/status") obj = response.json() print (obj ["emeters"][0]["power"]) low = obj ["emeters"][0]["power"] <= 20 high = obj ["emeters"][0]["power"] >= 400 # Signal, dass WP Startet if (obj ["emeters"][0]["power"]) > 50 and (obj ["emeters"][0]["power"]) < 250: logging.info('WP StartStartStartStartStart') # Logeintrag # bit1 IP .150 / bit2 IP .151 # SG-Ready Scenario 1 1 ON / ON Leistung Max 110% if winter and einspeisung <= -1500 and timewindow1: # 9-16h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit2 ein -1500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit1 ein -1500') # Logeintrag sleep(3600) # Minimum 1h eingeschaltet logging.info('SG-Ready sleep') # Logeintrag # SG-Ready Aus Scenario 0 0 OFF / OFF Normalbetrieb if winter and einspeisung > -100 and timewindow1: # 9-16h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus1 -500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus1 -500') # Logeintrag sleep(1800) # SG-Redy Aus if winter and timewindow2: # 17h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus2 -500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus2 -500') # Logeintrag sleep(1) # Nachtbooster Ein/Aus # SG-Ready Scenario 1 1 ON / ON Leistung Max (110%) (110% muss in Panasonic WP gessetzt sein) if winter and timewindow3 and zu_kalt: # < 20.5 # 20h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready Nb bit2 ein 20:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready Nb bit1 ein 20:00h') # Logeintrag if winter and timewindow4: # 23h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready Nb bit1 aus 23:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready Nb bit2 aus 23:00h') # Logeintrag # Nachtabsenkung Ein/Aus # SG-Ready Scenario 0 1 OFF / ON Leistung Min (95%) (95% muss in Panasonic WP gessetzt sein) if winter and timewindow5 and zu_warm: # > 21.5° # 23.05h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit2 ein 23:050h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus 23:05h') # Logeintrag if winter and timewindow6: # 7h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus 7:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus 7:00h') # Logeintrag
und
script WP-Licht.py
Python
Display More#!/usr/bin/env python3 import logging import locale import json import requests import subprocess import time from time import sleep while True: sleep(30) locale.setlocale(locale.LC_ALL, 'de_DE.utf8') logging.basicConfig(filename='/home/pi/th/ms.log', format='%(asctime)s %(message)s', datefmt="Woche %V %a %d.%m.%Y %H:%M:%S", level=logging.INFO) # Shel1y WP_Verbrauch auslesen response = requests.get("http://192.168.0.140/status") obj = response.json() print (obj ["emeters"][0]["power"]) logging.info("Watt: %.2f", obj ["emeters"][0]["power"]) # Logeintrag low = obj ["emeters"][0]["power"]<= 20.0 high = obj ["emeters"][0]["power"]>= 400 # Licht high/low schalten # if low: # subprocess.run ("/home/pi/th/WP-Licht_low.py") # if high: # subprocess.run ("/home/pi/th/WP-Licht_high.py") # E-Mail senden # if obj ["emeters"][0]["power"]<= 4.0: # subprocess.run ("/home/pi/th/Mail_WP_Aus.py")
Nach reboot sieht ms.log aber immer noch nicht so toll aus.
Code
Display MoreWoche 45 Fr 11.11.2022 21:46:11 Temp: 20.54 Woche 45 Fr 11.11.2022 21:46:11 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:46:12 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:46:19 Watt: 1165.24 Woche 45 Fr 11.11.2022 21:46:43 Temp: 20.54 Woche 45 Fr 11.11.2022 21:46:44 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:46:45 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:46:45 Watt: 1159.76 Woche 45 Fr 11.11.2022 21:46:46 Temp: 20.54 Woche 45 Fr 11.11.2022 21:46:46 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:46:47 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:46:49 Watt: 1160.58 Woche 45 Fr 11.11.2022 21:47:15 Watt: 1160.73 Woche 45 Fr 11.11.2022 21:47:16 Temp: 20.54 Woche 45 Fr 11.11.2022 21:47:16 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:47:17 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:47:19 Temp: 20.54 Woche 45 Fr 11.11.2022 21:47:19 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:47:19 Watt: 1166.46 Woche 45 Fr 11.11.2022 21:47:20 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:47:32 Watt: 1166.87 Woche 45 Fr 11.11.2022 21:47:33 Temp: 20.54 Woche 45 Fr 11.11.2022 21:47:33 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:47:34 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:47:45 Watt: 1166.17 Woche 45 Fr 11.11.2022 21:47:48 Temp: 20.54 Woche 45 Fr 11.11.2022 21:47:49 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:47:49 Watt: 1160.33 Woche 45 Fr 11.11.2022 21:47:50 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:47:51 Temp: 20.54 Woche 45 Fr 11.11.2022 21:47:51 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:47:52 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:48:02 Watt: 1167.14 Woche 45 Fr 11.11.2022 21:48:06 Temp: 20.54 Woche 45 Fr 11.11.2022 21:48:06 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:48:07 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:48:16 Watt: 1170.21 Woche 45 Fr 11.11.2022 21:48:19 Watt: 1165.95 Woche 45 Fr 11.11.2022 21:48:21 Temp: 20.54 Woche 45 Fr 11.11.2022 21:48:21 SG-Ready Nb bit2 ein 20:00h Woche 45 Fr 11.11.2022 21:48:22 SG-Ready Nb bit1 ein 20:00h Woche 45 Fr 11.11.2022 21:48:24 Temp: 20.54
-
Du hast recht, in diesem scrip steht nicht von Watt die geloggt werden sollten, das kommt von einem anderen script das aber genau gleich aufgebaut ist.
Nachtbooster, wenn die Bedingung erfüllt ist, schaltet es die Waermepumpe über das SG-Ready signal etwas höher.
23h = bis 23.00h
timewindow1-6 = Zeitfenster wo abgefragt werden soll ( Anfang/Ende).
WP-StartStartStartStartSart habe ich nur so gewählt damit es im log hinten heraussteht und ich es schneller finde, sollt ja nur alle 3-4h mal eintreten.
Hier noch das script mit dem Watt logging
Python
Display More#!/usr/bin/env python3 import logging import locale import json import requests import subprocess import time from time import sleep while True: sleep(30) locale.setlocale(locale.LC_ALL, 'de_DE.utf8') logging.basicConfig(filename='/home/pi/th/ms.log', format='%(asctime)s %(message)s', datefmt="Woche %V %a %d.%m.%Y %H:%M:%S", level=logging.INFO) # Shel1y WP_Verbrauch auslesen response = requests.get("http://192.168.0.140/status") obj = response.json() print (obj ["emeters"][0]["power"]) logging.info("Watt: %.2f", obj ["emeters"][0]["power"]) # Logeintrag low = obj ["emeters"][0]["power"]<= 20.0 high = obj ["emeters"][0]["power"]>= 400 # Licht high/low schalten if low: subprocess.run ("/home/pi/th/WP-Licht_low.py") if high: subprocess.run ("/home/pi/th/WP-Licht_high.py") # E-Mail senden if obj ["emeters"][0]["power"]<= 4.0: subprocess.run ("/home/pi/th/Mail_WP_Aus.py")
-
Danke fuer Deine Antwort.
Immer wenn ich ein script poste, sagen alle man versteht es nicht, ist nicht übersichtlich. Mit den Kommentaren sollte man doch verstehen was es macht.
Ich bin kein Programmierer und das was ich hier programmiere kommt von dem was ich früher mit SPS programmiert habe, anders istt es für mich ja noch komplizierter
Trotzdem eine Idee warum der log Eintrag nicht nur alle 30 sec. erfolgt?
-
Hallo,
was könnte der Grund sein dass der log 8x in der gleichen sec, den log füllt?
Meine Schleife fragt das script alle min. ab.
Python
Display More#!/usr/bin/env python3 import json import requests import logging import locale import datetime from datetime import datetime import http.client import time from time import sleep from influxdb import InfluxDBClient while True: sleep(30) locale.setlocale(locale.LC_ALL, 'de_DE.utf8') logging.basicConfig(filename='/home/pi/th/ms.log', format='%(asctime)s %(message)s', datefmt="Woche %V %a %d.%m.%Y %H:%M:%S", level=logging.INFO) # Zeitfenster now = datetime.now() Now = now.hour * 60 + now.minute timewindow1 = (9*60+0) <= Now < (16*60+0) # ein timewindow2 = (16*60+1) <= Now < (17*60+1) # aus timewindow3 = (20*60+0) <= Now < (23*60+0) # ein Nachtbooster timewindow4 = (23*60+1) <= Now < (23*60+2) # aus Nachtbooster timewindow5 = (23*60+5) <= Now < (23*60+6) # ein Nachtabsenkung timewindow6 = (7*60+0) <= Now < (7*60+1) # aus Nachtabsenkung # Periode Winter oder Sommer monat = datetime.now().month sommer = monat >= 3 and monat <= 9 winter = not (sommer) # Enspeisung Influx auslesen client = InfluxDBClient(host='192.168.0.29', port=8086) # ip oder localhost client.switch_database('zaehler') results = client.query('SELECT "Gesamtleistung" FROM "AC" GROUP BY * ORDER BY DESC LIMIT 1') points = results.get_points point = 0 for point in points(): shelly_eks = point['Gesamtleistung'] einspeisung = shelly_eks # Raumtemperatur auslesen (Wohnzimmer west / Controme) response = requests.get("http://192.168.0.23/get/json/v1/1/temps/") obj = response.json() for raum in obj[0]["raeume"]: if raum ["name"] == "Wohnen west": if raum ["sensoren"][1]["wert"]: print(raum["sensoren"][1]["wert"]) logging.info("Temp: %.2f", raum ["sensoren"][1]["wert"]) # Logeintrag zu_kalt = raum ["sensoren"][1]["wert"]<= 20.5 zu_warm = raum ["sensoren"][1]["wert"]>= 21.5 # Shel1y WP_Verbrauch auslesen response = requests.get("http://192.168.0.140/status") obj = response.json() print (obj ["emeters"][0]["power"]) low = obj ["emeters"][0]["power"] <= 20 high = obj ["emeters"][0]["power"] >= 400 # Signal, dass WP Startet if (obj ["emeters"][0]["power"]) > 50 and (obj ["emeters"][0]["power"]) < 250: sleep(5) logging.info('WP StartStartStartStartStart') # Logeintrag # bit1 IP .150 / bit2 IP .151 # SG-Ready Scenario 1 1 ON / ON Leistung Max 110% if winter and einspeisung <= -1500 and timewindow1: # 9-16h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit2 ein -1500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit1 ein -1500') # Logeintrag sleep(3600) # Minimum 1h eingeschaltet logging.info('SG-Ready sleep') # Logeintrag # SG-Ready Aus Scenario 0 0 OFF / OFF Normalbetrieb if winter and einspeisung > -100 and timewindow1: # 9-16h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus1 -500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus1 -500') # Logeintrag sleep(1800) # SG-Redy Aus if winter and timewindow2: # 17h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus2 -500') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus2 -500') # Logeintrag sleep(1) # Nachtbooster Ein/Aus # SG-Ready Scenario 1 1 ON / ON Leistung Max (110%) (110% muss in Panasonic WP gessetzt sein) if winter and timewindow3 and zu_kalt: # < 20.5 # 20h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready Nb bit2 ein 20:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready Nb bit1 ein 20:00h') # Logeintrag if winter and timewindow4: # 23h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready Nb bit1 aus 23:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready Nb bit2 aus 23:00h') # Logeintrag # Nachtabsenkung Ein/Aus # SG-Ready Scenario 0 1 OFF / ON Leistung Min (95%) (95% muss in Panasonic WP gessetzt sein) if winter and timewindow5 and zu_warm: # > 21.5° # 23.05h conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=on") # Closed logging.info('SG-Ready bit2 ein 23:050h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus 23:05h') # Logeintrag if winter and timewindow6: # 7h conn = http.client.HTTPConnection("[192.168.0.150]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit1 aus 7:00h') # Logeintrag sleep(1) conn = http.client.HTTPConnection("[192.168.0.151]") conn.request("GET", "/relay/0?turn=off") # Open logging.info('SG-Ready bit2 aus 7:00h') # Logeintrag
Code
Display MoreWoche 45 Fr 11.11.2022 14:53:34 Watt: 460.97 Woche 45 Fr 11.11.2022 14:53:34 Watt: 460.97 Woche 45 Fr 11.11.2022 14:53:38 Watt: 461.61 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:39 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:40 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:40 Watt: 464.51 Woche 45 Fr 11.11.2022 14:53:47 Watt: 457.90 Woche 45 Fr 11.11.2022 14:53:47 Watt: 457.90
-
Funktioniert, Danke.
Codeprint (obj ["emeters"][0]["power"]) logging.info(f"Watt: {round(obj ['emeters'][0]['power'], 2)}") # Logeintrag
Codeprint(raum["sensoren"][1]["wert"]) logging.info(f"Temp: {round(raum['sensoren'][1]['wert'], 2)}") # Logeintrag
CodeWoche 45 Do 10.11.2022 12:18:34 SG-Ready bit1 aus1 -500 Woche 45 Do 10.11.2022 12:18:35 SG-Ready bit2 aus1 -500 Woche 45 Do 10.11.2022 12:19:10 Watt: 608.77 Woche 45 Do 10.11.2022 12:19:33 Temp: 20.76 Woche 45 Do 10.11.2022 12:19:33 SG-Ready bit1 aus1 -500 Woche 45 Do 10.11.2022 12:19:34 SG-Ready bit2 aus1 -500 Woche 45 Do 10.11.2022 12:20:33 Temp: 20.76
-
Und schon gehts
Danke Euch-
-
Danke fuer die schnelle Rueckmeldung.
Leider kommt ein Fehler. Fuer was ist das f in (f " Watt : ?
-
-
Sorry, Fehler gefunden, falsche IP adresse.
-
Print hat funktioniert , jetzt im script kommt aber ein error:
Code
Display Morepi@solaranzeige:~/th $ /home/pi/th/test_shelly.py Traceback (most recent call last): File "/home/pi/th/test_shelly.py", line 25, in <module> obj = response.json() File "/usr/lib/python3/dist-packages/requests/models.py", line 897, in json return complexjson.loads(self.text, **kwargs) File "/usr/lib/python3/dist-packages/simplejson/__init__.py", line 518, in loads return _default_decoder.decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 370, in decode obj, end = self.raw_decode(s) File "/usr/lib/python3/dist-packages/simplejson/decoder.py", line 400, in raw_decode return self.scan_once(s, idx=_w(s, idx).end()) simplejson.errors.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
script:
Python
Display More#!/usr/bin/env python3 from socket import socket, AF_INET, SOCK_DGRAM import json import requests import time from time import sleep def send_command(cmd, ip, port): with socket(AF_INET, SOCK_DGRAM) as sock: addr = (ip, port) sock.sendto(cmd, addr) ZONE1_ON=b"\x42\x00\x55" ZONE1_OFF=b"\x46\x00\x55" IP="192.168.0.20" PORT=8899 # Raumtemperatur Wohnen west, auslesen response = requests.get("http://192.168.0.23/status") obj = response.json() print (obj ["emeters"][0]["power"]) low = obj ["emeters"][0]["power"]<= 20.0 high = obj ["emeters"][0]["power"]>= 400 # test mit lampe if low: send_command(ZONE1_ON, IP, PORT) sleep(2) if high: send_command(ZONE1_OFF, IP, PORT)
-
Ja das funktioniert so, haette ich auch selber drauf kommen koennen.
Danke Dir fuer die Hilfe.
Gruss
gwaag
-
Hallo bitte brauche nochmals Hilfe fuer eine json liste die etwas anderst strukturiert ist wie die von Beitrag 5.
Wie filtere ich "emeters" und "power" im ersten Element, damit ich ihn weiter verarbeiten kann mit z.B print.
Blicke da immer noch nicht ganz durch.
Code
Display More{ "emeters": [ { "power": 14.41, "reactive": -90.57, "pf": -0.16, "voltage": 234.14, "is_valid": true, "total": 310009.9, "total_returned": 0.0 }, { "power": 0.0, "reactive": 0.0, "pf": 0.0, "voltage": 234.14, "is_valid": true, "total": 0.0, "total_returned": 0.0 } ], "update": { "status": "pending", "has_update": true, "new_version": "20221027-105518/v1.12.1-ga9117d3", "old_version": "20220809-125130/v1.12-g99f7e0b" }, "ram_total": 51072, "ram_free": 35832, "fs_size": 233681, "fs_free": 157377, "uptime": 3296604
-
Danke, jetzt funktioniert es, habe das mit einer wifi LED Lampe getestet, später werde ich das script fuer meine Wärmepumpe brauchen.
(SG_Ready Signal) Wenn Raumtemparatur < 20° anhebung, wenn > 21.5° absenkung
Deine Funktion schaue ich mir spaeter noch genauer an
Danke
testapi.py
Python
Display More#!/usr/bin/env python3 from socket import socket, AF_INET, SOCK_DGRAM import json import requests import time from time import sleep def send_command(cmd, ip, port): with socket(AF_INET, SOCK_DGRAM) as sock: addr = (ip, port) sock.sendto(cmd, addr) ZONE1_ON=b"\x42\x00\x55" ZONE1_OFF=b"\x46\x00\x55" IP="192.168.0.20" PORT=8899 # Raumtemperatur "Wohnen west", auslesen response = requests.get("http://192.168.0.23/get/json/v1/1/temps/") obj = response.json() for raum in obj[0]["raeume"]: if raum["name"] == "Wohnen west": if raum["sensoren"][1]["wert"]>= 20.5: print (raum ["sensoren"][1]["wert"]) send_command(ZONE1_ON, IP, PORT) sleep(2) send_command(ZONE1_OFF, IP, PORT)
-
Danke fuer die Hilfe, leider bin ich ja Anfaenger und weiss jetzt auch nichts mit dem anzufangen:
-
-
Suoer jetzt zeigt es die aktuelle Raumtemperatur an.
Danke und Gruss
pili