Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add SolarLog Unterverbrauchszähler #1774

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions modules/smarthome/solarlog/watt.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/python3
import sys
import json
import jq
import os
import requests

devicenumber = str(sys.argv[1])
ipadr = os.environ.get('bezug_solarlog_ip') #IP-Adresse des SolarLog kommt vom PV Modul

# ID des Zählers im SolarLog (SolarLog base hat 2 RS485 Schnittstellen und die Sortierung scheint B/A zu schein)
# Daher am besten alle Werte mit folgendem cli commando abrufen und ggf mit der Webansicht http://ip/#ilang=DE&b=p_live_table abgleichen.
# curl --request POST --url http://<ip des Solarlogs>/getjp --header 'Content-Type: application/json' --data '{"782":null}'
# Die Zähler ID ist die Nummer vor dem Verbrauchswert.
smid = int(sys.argv[2])

# Abfrage-URL, die das JSON liefert.
jsonurl = "http://"+str(ipadr)+"/getjp"

request_data_power = {'782':{str(smid):None}}
request_data_powerc = {'777': {'0':None}} # need more filtering

#json Key in dem der aktuelle Leistungswert stehen
jsonpower = '."782"."1"'
# json enthält immer eine Liste von Tagen und alle Werte, letzer Array entry ist heute, Filter per Device ID
jsonpowerc = '."777"."0"[-1][1]['+str(smid)+']'

try:
answer_power = json.loads(requests.post(jsonurl,json=request_data_power,timeout=3).content.decode('UTF-8'))
power = jq.compile(jsonpower).input(answer_power).first()
if (power==None):
power=0
except:
power = 0

try:
answer_powerc = json.loads(requests.post(jsonurl,json=request_data_powerc,timeout=3).content.decode('UTF-8'))
powerc = jq.compile(jsonpowerc).input(answer_powerc).first()
if (powerc==None):
powerc=0
except:
powerc = 0

f1 = open('/var/www/html/openWB/ramdisk/smarthome_device_ret' + str(devicenumber), 'w')
answer = '{"power":' + str(power) + ',"powerc":' + str(powerc) + '}'
#print(answer)
json.dump(answer, f1)
f1.close()
23 changes: 20 additions & 3 deletions web/settings/smarthomeconfig.php
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,7 @@
<option value="mystrom" data-option="mystrom">MyStrom</option>
<option value="viessmann" data-option="viessmann">Viessmann</option>
<option value="mqtt" data-option="mqtt">Mqtt</option>
<option value="solarlog" data-option="solarlog">SolarLog</option>
<option value="pyt" data-option="pyt">Pyt (veraltet, bitte andere Option wählen)</option>
</select>
<span class="form-text small device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-none hide">
Expand Down Expand Up @@ -119,11 +120,9 @@
</span>

<span class="form-text small device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-viessmann hide">
Vitalcal 200-s Wärmepumpe mit LON Kommunikationsmodul und Vitogate 300. Wenn die Einschaltbedingung erreicht ist wird Komfortfunktion "Einmalige Warmwasserbereitung" außerhalb des Zeitprogramms gestartet. Für die "Einmalige Warmwasserbereitung" wird der Warmwassertemperatur-Sollwert 2 genutzt. In der Wp kann eingestellt werden, ob für diese Funktion die Elektroheizung (Heizstab) benutzt werden soll.
Vitocal 200-s Wärmepumpe mit LON Kommunikationsmodul und Vitogate 300. Wenn die Einschaltbedingung erreicht ist wird Komfortfunktion "Einmalige Warmwasserbereitung" außerhalb des Zeitprogramms gestartet. Für die "Einmalige Warmwasserbereitung" wird der Warmwassertemperatur-Sollwert 2 genutzt. In der Wp kann eingestellt werden, ob für diese Funktion die Elektroheizung (Heizstab) benutzt werden soll.
</span>



<span class="form-text small device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-elwa hide">
Heizstab ELWA-E der Firma my-PV<br>
Im Web Frontend vom Heizstab muss unter Steuerungs-Einstellungen der Parameter "Ansteuerungs-Typ = Modbus TCP" und "Power Timeout = 120 Sek" gesetzt werden.
Expand Down Expand Up @@ -154,6 +153,12 @@
<span class="form-text small device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-mystrom hide">
Mit diesem Typ werden SmartHome Geräte des Herstellers MyStrom unterstützt.<br>
</span>
<span class="form-text small device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-mystrom hide">
Ermöglicht die Einbindung von Unterverbrauchszählern aus Solarlog (z.B. Pro380, Pro1).<br>
<div class="card-text alert alert-info">
Die zugehörige IP Adresse ist im PV Modul einzustellen.
</div>
</span>
</div>
</div>
</div>
Expand Down Expand Up @@ -508,6 +513,18 @@
</div>
</div>
</div>

<div class="form-group device<?php echo $devicenum; ?>-option device<?php echo $devicenum; ?>-option-solarlog hide">
<hr class="border-secondary">
<div class="form-row mb-1">
<label class="col-md-4 col-form-label">Zähler ID</label>
<div class="col">
<input id="device_solarlog_uz<?php echo $devicenum; ?>" name="device_solarlog_uz" class="form-control" type="number" min="0" max="99" step="100" required="required" data-default="0" value="0" data-topicprefix="openWB/config/get/SmartHome/" data-topicsubgroup="Devices/<?php echo $devicenum; ?>/">
<span class="form-text small">ID des Zählers im SolarLog. SolarLog hat 2 RS485 Schnittstellen und die Sortierung scheint B,A zu sein. In der Webansicht http://solarlog.ip/#ilang=DE&b=p_live_table unter Verbrauchszähler bei 0 anfrangen zu zählen.</span>
</div>
</div>
</div>

<hr class="border-secondary">
<div class="form-group">
<div class="form-row mb-1">
Expand Down