WR2 Shelly...

Fragen zur Nutzung, Features, usw..
HSC
Beiträge: 3941
Registriert: So Jan 10, 2021 8:49 am

Re: WR2 Shelly...

Beitrag von HSC »

Nee, habe ich nicht...
VG
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: WR2 Shelly...

Beitrag von okaegi »

okay dann mach ich es und liefer es aus.
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: WR2 Shelly...

Beitrag von okaegi »

Wr1 shelly nun in der neusten nightly auch auf python umgestellt.
Gruss Oliver
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
newbe2020
Beiträge: 56
Registriert: Mi Jul 01, 2020 6:49 am

Re: WR2 Shelly...

Beitrag von newbe2020 »

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
derNeueDet
Beiträge: 4197
Registriert: Mi Nov 11, 2020 7:16 pm

Re: WR2 Shelly...

Beitrag von derNeueDet »

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
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)
newbe2020
Beiträge: 56
Registriert: Mi Jul 01, 2020 6:49 am

Re: WR2 Shelly...

Beitrag von newbe2020 »

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ß
derNeueDet
Beiträge: 4197
Registriert: Mi Nov 11, 2020 7:16 pm

Re: WR2 Shelly...

Beitrag von derNeueDet »

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
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)
newbe2020
Beiträge: 56
Registriert: Mi Jul 01, 2020 6:49 am

Re: WR2 Shelly...

Beitrag von newbe2020 »

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
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: WR2 Shelly...

Beitrag von okaegi »

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
Entwickler- openWB (ehrenamtlich) / Feedback zu Funktionen immer erwünscht..
Smarthomeprobleme siehe hier (update :!: ): viewtopic.php?f=14&t=5923
okaegi
Beiträge: 2185
Registriert: Fr Mär 08, 2019 1:57 pm

Re: WR2 Shelly...

Beitrag von okaegi »

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 ********

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
Antworten