WR2 Shelly...
-
- Beiträge: 2348
- Registriert: Fr Mär 08, 2019 1:57 pm
- Has thanked: 1 time
- Been thanked: 8 times
Re: WR2 Shelly...
okay dann mach ich es und liefer es aus.
Gruss Oliver
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
-
- Beiträge: 2348
- Registriert: Fr Mär 08, 2019 1:57 pm
- Has thanked: 1 time
- Been thanked: 8 times
Re: WR2 Shelly...
Wr1 shelly nun in der neusten nightly auch auf python umgestellt.
Gruss Oliver
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
Re: WR2 Shelly...
Hallo Forum,
ich habe einen Shelly 1PM plus mit Messfunktion als WR2 konfiguriert. Leider bekomme ich keine Leistung in OpenWB standalone (Beta:
1.9.254) angezeigt, sondern nur folgende debug.log Einträge:
***********
urllib.error.HTTPError: HTTP Error 404: Not Found
raise HTTPError(req.full_url, code, msg, hdrs, fp)
File "/usr/lib/python3.7/urllib/request.py", line 649, in http_error_default
result = func(*args)
File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
return self._call_chain(*args)
File "/usr/lib/python3.7/urllib/request.py", line 569, in error
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.7/urllib/request.py", line 641, in http_response
response = meth(req, response)
File "/usr/lib/python3.7/urllib/request.py", line 531, in open
return opener.open(url, data, timeout)
File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/status", timeout=3).read().decode("utf-8")))
File "/var/www/html/openWB/modules/wr_shelly/shellywr.py", line 32, in <module>
Traceback (most recent call last):
urllib.error.HTTPError: HTTP Error 404: Not Found
raise HTTPError(req.full_url, code, msg, hdrs, fp)
File "/usr/lib/python3.7/urllib/request.py", line 649, in http_error_default
result = func(*args)
File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
return self._call_chain(*args)
File "/usr/lib/python3.7/urllib/request.py", line 569, in error
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.7/urllib/request.py", line 641, in http_response
response = meth(req, response)
File "/usr/lib/python3.7/urllib/request.py", line 531, in open
return opener.open(url, data, timeout)
File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/status", timeout=3).read().decode("utf-8")))
File "/var/www/html/openWB/modules/wr_shelly/shellywr.py", line 32, in <module>
Traceback (most recent call last):
*******
Das Webinterface des shelly zeigt über die URL im WLAN in dem auch die OpenWB hängt brav die Leistung an.
Weiß jemand was zu tun ist? Gibt es da noch spezielle Einstellungen die am Shelly vorgenommen werden müssen?
viele Grüße
ich habe einen Shelly 1PM plus mit Messfunktion als WR2 konfiguriert. Leider bekomme ich keine Leistung in OpenWB standalone (Beta:
1.9.254) angezeigt, sondern nur folgende debug.log Einträge:
***********
urllib.error.HTTPError: HTTP Error 404: Not Found
raise HTTPError(req.full_url, code, msg, hdrs, fp)
File "/usr/lib/python3.7/urllib/request.py", line 649, in http_error_default
result = func(*args)
File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
return self._call_chain(*args)
File "/usr/lib/python3.7/urllib/request.py", line 569, in error
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.7/urllib/request.py", line 641, in http_response
response = meth(req, response)
File "/usr/lib/python3.7/urllib/request.py", line 531, in open
return opener.open(url, data, timeout)
File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/status", timeout=3).read().decode("utf-8")))
File "/var/www/html/openWB/modules/wr_shelly/shellywr.py", line 32, in <module>
Traceback (most recent call last):
urllib.error.HTTPError: HTTP Error 404: Not Found
raise HTTPError(req.full_url, code, msg, hdrs, fp)
File "/usr/lib/python3.7/urllib/request.py", line 649, in http_error_default
result = func(*args)
File "/usr/lib/python3.7/urllib/request.py", line 503, in _call_chain
return self._call_chain(*args)
File "/usr/lib/python3.7/urllib/request.py", line 569, in error
'http', request, response, code, msg, hdrs)
File "/usr/lib/python3.7/urllib/request.py", line 641, in http_response
response = meth(req, response)
File "/usr/lib/python3.7/urllib/request.py", line 531, in open
return opener.open(url, data, timeout)
File "/usr/lib/python3.7/urllib/request.py", line 222, in urlopen
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/status", timeout=3).read().decode("utf-8")))
File "/var/www/html/openWB/modules/wr_shelly/shellywr.py", line 32, in <module>
Traceback (most recent call last):
*******
Das Webinterface des shelly zeigt über die URL im WLAN in dem auch die OpenWB hängt brav die Leistung an.
Weiß jemand was zu tun ist? Gibt es da noch spezielle Einstellungen die am Shelly vorgenommen werden müssen?
viele Grüße
-
- Beiträge: 4392
- Registriert: Mi Nov 11, 2020 7:16 pm
- Has thanked: 1 time
- Been thanked: 12 times
Re: WR2 Shelly...
Hast du nur eine IP eingegeben oder http:// vor der URL?
Wenn nur IP, dann mal mit http:// davor probieren.
Edit: nee kannst du vergessen, ich sehe gerade, dass das im Code davor gebaut wird.
Dann die Frage in die andere Richtung: hast du http davor stehen?
VG
Det
Wenn nur IP, dann mal mit http:// davor probieren.
Edit: nee kannst du vergessen, ich sehe gerade, dass das im Code davor gebaut wird.
Dann die Frage in die andere Richtung: hast du http davor stehen?
VG
Det
10kWp PV mit SMA Tripower 10000TL-10 (PE11 mit SDM72V2); 2,4kWp mit Solis 2.5 G6 (EE11 mit SDM120). OpenWB Standard+. EVU EM540 an einem Raspi mit Venus OS. BEV Mercedes EQA 250 (07/2023) und EQA 300 (06/2024)
Re: WR2 Shelly...
hi Det,
http konnte man auch nicht eingeben. Meine Vermutung das die neue Shelly Generation "plus" irgendwie anders abgefragt werden muss.
<shelly_ip>/status liefert auch ein "not found" zurück, hingegen <shelly_ip>/#/status lädt die normale Weboberfläche des Shelly inklusive Watt.
Hatte das shellywr.py schon entsprechend angepasst, leider ohne Erfolg
Gruß
http konnte man auch nicht eingeben. Meine Vermutung das die neue Shelly Generation "plus" irgendwie anders abgefragt werden muss.
<shelly_ip>/status liefert auch ein "not found" zurück, hingegen <shelly_ip>/#/status lädt die normale Weboberfläche des Shelly inklusive Watt.
Hatte das shellywr.py schon entsprechend angepasst, leider ohne Erfolg
Gruß
-
- Beiträge: 4392
- Registriert: Mi Nov 11, 2020 7:16 pm
- Has thanked: 1 time
- Been thanked: 12 times
Re: WR2 Shelly...
Ah, Shelly Plus. Ja, der ist anders abzufragen.
Im smarthome hat Okaegi das schon allgemein gelöst.
https://github.com/snaptec/openWB/blob/ ... ly/watt.py
Alternativ kannst du das JSON WR Modul nutzen.
Lass mal sehen, was als Ergebnis zurück kommt, wenn du das an deinen Shelly schickst
http://<ipdesShelly>/rpc/Shelly.GetStatus
Im smarthome hat Okaegi das schon allgemein gelöst.
https://github.com/snaptec/openWB/blob/ ... ly/watt.py
Alternativ kannst du das JSON WR Modul nutzen.
Lass mal sehen, was als Ergebnis zurück kommt, wenn du das an deinen Shelly schickst
http://<ipdesShelly>/rpc/Shelly.GetStatus
10kWp PV mit SMA Tripower 10000TL-10 (PE11 mit SDM72V2); 2,4kWp mit Solis 2.5 G6 (EE11 mit SDM120). OpenWB Standard+. EVU EM540 an einem Raspi mit Venus OS. BEV Mercedes EQA 250 (07/2023) und EQA 300 (06/2024)
Re: WR2 Shelly...
Ich habe mir den Code aus dem shelly Smarthome modul mal angesehen und mir nur das rausgezogen was für die neu Shelly version nötig war. Was soll ich sagen, es funktioniert!!! Unten die Änderungen im shellywr.py die nötig waren in fett.
********* /var/www/html/openWB/modules/wr_shelly/shellywr.py ********
#!/usr/bin/python3
import sys
import os
import time
import json
import getopt
import socket
import struct
import codecs
import binascii
import urllib.request
def totalPowerFromShellyJson(answer):
if 'meters' in answer:
meters = answer['meters'] # shelly
else:
meters = answer['emeters'] # shellyEM & shelly3EM
total = 0
# shellyEM has one meter, shelly3EM has three meters:
for meter in meters:
total = total + meter['power']
return int(total)
ipadr = str(sys.argv[1])
fname = str(sys.argv[2])
aktpower = 0
# Versuche Daten von Shelly abzurufen.
# answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/#/status", timeout=3).read().decode("utf-8")))
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/rpc/Shelly.GetStatus", timeout=3).read().decode("utf-8")))
f = open('/var/www/html/openWB/ramdisk/shelly_wr_ret.' + str(ipadr), 'w')
f.write(str(answer))
f.close()
# Versuche Werte aus der Antwort zu extrahieren.
try:
# aktpower = totalPowerFromShellyJson(answer) * -1
aktpower = int(answer['switch:0'] ['apower']) * -1
except:
aktpower = 0
f1 = open('/var/www/html/openWB/ramdisk/' + str(fname), 'w')
f1.write(str(aktpower))
f1.close()
Viele Grüße
********* /var/www/html/openWB/modules/wr_shelly/shellywr.py ********
#!/usr/bin/python3
import sys
import os
import time
import json
import getopt
import socket
import struct
import codecs
import binascii
import urllib.request
def totalPowerFromShellyJson(answer):
if 'meters' in answer:
meters = answer['meters'] # shelly
else:
meters = answer['emeters'] # shellyEM & shelly3EM
total = 0
# shellyEM has one meter, shelly3EM has three meters:
for meter in meters:
total = total + meter['power']
return int(total)
ipadr = str(sys.argv[1])
fname = str(sys.argv[2])
aktpower = 0
# Versuche Daten von Shelly abzurufen.
# answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/#/status", timeout=3).read().decode("utf-8")))
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/rpc/Shelly.GetStatus", timeout=3).read().decode("utf-8")))
f = open('/var/www/html/openWB/ramdisk/shelly_wr_ret.' + str(ipadr), 'w')
f.write(str(answer))
f.close()
# Versuche Werte aus der Antwort zu extrahieren.
try:
# aktpower = totalPowerFromShellyJson(answer) * -1
aktpower = int(answer['switch:0'] ['apower']) * -1
except:
aktpower = 0
f1 = open('/var/www/html/openWB/ramdisk/' + str(fname), 'w')
f1.write(str(aktpower))
f1.close()
Viele Grüße
-
- Beiträge: 2348
- Registriert: Fr Mär 08, 2019 1:57 pm
- Has thanked: 1 time
- Been thanked: 8 times
Re: WR2 Shelly...
Shelly und Shelly plus sind unterschiedlich von der Rückgabe. In Smarthome 2.0 hat es die Logik drin das er zuerst rausfindet ob es ein Shelly oder Shelly plus ist, und dann es wird der in Zukunft unterschiedlich abgefragt. Ich bau das gleiche Verhalten mal in der WR Shelly ein...
Gruss Oliver
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
-
- Beiträge: 2348
- Registriert: Fr Mär 08, 2019 1:57 pm
- Has thanked: 1 time
- Been thanked: 8 times
Re: WR2 Shelly...
Hier ist das wr shelly modul, welches die Logik vom smarthome 2.0 eingebaut hat.
Es sollte sowohl mit shelly wie auch shelly plus laufen. Ich habe ein wr mit shelly, könntest du das mit deinem shelly plus testen ? Ich teste das mit meinem wr shelly. Es hat neue Datein auf der ramdisk. Dein shelly müsste als gen = 2 entdeckt werden.
Wenn ich deinen Feedback habe, kann ich es als pr übergeben.
Danke Oliver
********* /var/www/html/openWB/modules/wr_shelly/shellywr.py ********
Es sollte sowohl mit shelly wie auch shelly plus laufen. Ich habe ein wr mit shelly, könntest du das mit deinem shelly plus testen ? Ich teste das mit meinem wr shelly. Es hat neue Datein auf der ramdisk. Dein shelly müsste als gen = 2 entdeckt werden.
Wenn ich deinen Feedback habe, kann ich es als pr übergeben.
Danke Oliver
********* /var/www/html/openWB/modules/wr_shelly/shellywr.py ********
Code: Alles auswählen
#!/usr/bin/python3
import sys
import os
import time
import json
import getopt
import socket
import struct
import codecs
import binascii
import urllib.request
def totalPowerFromShellyJson(answer):
if 'meters' in answer:
meters = answer['meters'] # shelly
else:
meters = answer['emeters'] # shellyEM & shelly3EM
total = 0
# shellyEM has one meter, shelly3EM has three meters:
for meter in meters:
total = total + meter['power']
return int(total)
ipadr = str(sys.argv[1])
fname = str(sys.argv[2])
aktpower = 0
gen = '1'
fnprefix = '/var/www/html/openWB/ramdisk/shelly_wr_ret.' + str(ipadr)
fnameinf = fnprefix + '_shelly_info'
fnameg = fnprefix + '_shelly_infog'
if os.path.isfile(fnameg):
f = open(fnameg, 'r')
gen=str(f.read())
f.close()
else:
answergen= json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/shelly", timeout=3).read().decode("utf-8")))
#answergen.update(g_dictionary)
f = open(fnameinf, 'w')
json.dump(answergen,f)
f.close()
if 'gen' in answergen:
gen = str(int(answergen['gen']))
f = open(fnameg, 'w')
f.write(str(gen))
f.close()
if (gen == "1"):
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/status", timeout=3).read().decode("utf-8")))
else:
answer = json.loads(str(urllib.request.urlopen("http://"+str(ipadr)+"/rpc/Shelly.GetStatus",timeout=3).read().decode("utf-8")))
f = open(fnprefix, 'w')
f.write(str(answer))
f.close()
# Versuche Werte aus der Antwort zu extrahieren.
try:
if (gen == "1"):
aktpower = totalPowerFromShellyJson(answer) * -1
else:
aktpower = int(answer['switch:0'] ['apower']) * -1
except:
aktpower = 0
f1 = open('/var/www/html/openWB/ramdisk/' + str(fname), 'w')
f1.write(str(aktpower))
f1.close()
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923
Smarthomeprobleme siehe hier (update ): viewtopic.php?f=14&t=5923