Cookies op Tweakers

Tweakers is onderdeel van DPG Media en maakt gebruik van cookies, JavaScript en vergelijkbare technologie om je onder andere een optimale gebruikerservaring te bieden. Ook kan Tweakers hierdoor het gedrag van bezoekers vastleggen en analyseren. Door gebruik te maken van deze website, of door op 'Cookies accepteren' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt? Bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

Solis Omvormer met LAN aansluiting uitlezen met Domoticz

Pagina: 1
Acties:

Vraag


Acties:
  • 0Henk 'm!

  • AlexWever
  • Registratie: juni 2020
  • Laatst online: 24-06-2020
Hoi ,

ik zag wat voorbij komen in eerdere posts, maar hierbij het volgende , ik heb een solis omvormer. deze is verbonden met een LAN stick.
Ik ben een starter (dummy) op gebied van raspberry en domoticz.
graag wil ik het momentele vermogen van mijn panelen uitlezen, om deze info weer te doorkoppelen aan
een elektrisch element (9 kW) in mijn warmte buffers. Als de opbrengst van mijn panelen redelijk is.

Zou iemand mij aan kunnen geven hoe ik het momentele vormogen kan uitlezen via Domoticz.

alvast bedankt voor je tijd en groeten,

Alex wever
...

Relevante software en hardware die ik gebruik
Raspberry PI4 Domoticz 2020.2

Alle reacties


Acties:
  • 0Henk 'm!

  • AUijtdehaag
  • Registratie: oktober 2006
  • Niet online
Kun je beter zo doen:
AUijtdehaag in "Overtollige stroom gebruiken voor warmwater"

Dan heb je in ieder geval geen koude douche als het sd-kaartje van de Pi weer eens crashed.

[Voor 29% gewijzigd door AUijtdehaag op 07-06-2020 16:10]

PV Output - Panasonic Hit Kuro Zuid / Solar Frontier Noord- 5 kW Mitsubsidie WP - Aton powerrr to heat


  • jotheman
  • Registratie: september 2000
  • Laatst online: 13-06 19:18

jotheman

Was like that when I got here!

Okay, ik heb sinds kort ook zonnepanelen en heb ontzettend zitten vechten om ze uit te lezen. Het gaat om een Solis inverter (Ginlong) waarvan de statistieken "automatisch" geüpload worden naar de portal pagina m.ginlong.com. Ik gebruik als mobiele app de "Solis Home" app, dus gebruik je die ook, dikke kans dat je deze aanpak op een gelijksoortige manier kunt uitlezen.

Ik heb ontzettend veel zitten zoeken om de statistieken vanuit de Solis-inverter naar Domoticz te krijgen. Ik kom veel info en topics tegen van mensen die het allemaal op verschillende manier hebben aangepakt, waarbij het soms wel gelukt is, soms niet. Dit is iig mijn verhaal, hopelijk heeft er iemand iets aan. En ja, ik cross-post dit bewust in meerdere topics zodat mensen met dezelfde uitdaging het allemaal (hopelijk) snel terug kunnen vinden. Bewuste crosspost dus!

De aanpak:
- Zorg dat je op m.ginglong.com kunt aanmelden en dat je het username/wachtwoord beschikbaar hebt,
- Maak in Domoticz Dummy hardware aan met 2 sensors erbij, een voor het verbruik (lees: wat je PV opwekt) en een switch (wat de status is van je PV, aan of uit). Zie hieronder voor hoe dit er bij mij uitziet:

- Zet onderstaand Python-script (heet bij mij ginlong.py) op je Domoticz-machine neer en zorg dat je Python beschikbaar hebt op het masjientje. Update de parameters onder #config en #domoticz settings:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#!/usr/bin/python
import requests
import urllib, urllib2
import json

#config
username            = 'email@address.com'               #your username to log on to m.ginlong.com
password            = 'P@ssw0rd!'               #your password to log on to m.ginlong.com
domain              = 'm.ginlong.com'           #webportal to read
plantId             = '965529'                  #plant id (can be found on m.ginlong.com page information)
lan                 = '2'                       #language (2 = English)

#domoticz settings
domoticz_host           = 'domoticzuser:domoticzpassword@192.168.2.53'              #Username/password and IP of Domoticz
domoticz_port           = '8080'                #Port to connect to Domoticz
domoticz_url            = 'json.htm'            #URL to post stats to Domoticz, does not require changes normally
domoticz_device_idx         = '486'         #IDX of Watt meter in Domoticz
domoticz_device_onoff_idx       = '485'         #IDX of on/off switch (to see whether its on or off for PV)

# Create session for requests
session = requests.session()

#building url
url = 'http://'+domain+'/cpro/login/validateLogin.json'
params = {
    "userName": username,
    "password": password,
    "lan": lan,     
    "domain": domain,
    "userType": "C"
}

#login call
resultData = session.post(url, params=params)
resultJson = resultData.json()
if resultJson['result'].get('isAccept') == 1:
    print("Login Succesful!")
else:
    print("Login Failed!!")
    Exit()

# Get plant details
url = 'http://m.ginlong.com/cpro/epc/plantview/view/doPlantList.json'

cookies = {'language': lan}
resultData = session.get(url, cookies=cookies)
resultJson = resultData.json()

# Uncomment lines below to write the exported json-file to the location noted
#out_file = open("/usr/local/bin/ZPExport.json", "w")
#json.dump(resultJson, out_file, indent = 6)
#out_file.close()

ActualPower = resultJson['result']['pagination']['data'][0].get('curPower')
ActualPowerNoSep = str(ActualPower).split(".")[0]
etoday = resultJson['result']['pagination']['data'][0].get('energyToday')
multiply='1000.0'
etotal1000 = float(etoday) * float(multiply)
etotalstr=str(etotal1000)
etotalstrNoSep = str(etotalstr).split(".")[0]
OnOrOff = resultJson['result']['pagination']['data'][0].get('status')

#logging values
print 'ActualPower: ' + str(ActualPowerNoSep)
print 'etoday: ' + str(etotalstrNoSep)
print 'Status: ' + str(OnOrOff)

#uploading values to domoticz
url = ("http://" + domoticz_host + ":" + domoticz_port + "/" + domoticz_url+ "?type=command&param=udevice&idx=" + domoticz_device_idx+ "&nvalue=0&svalue=" + str(ActualPowerNoSep))
urlonoff = ("http://" + domoticz_host + ":" + domoticz_port + "/" + domoticz_url+ "?type=command&param=udevice&idx=" + domoticz_device_onoff_idx+ "&nvalue=" + str(OnOrOff))
urllib.urlopen(url)
urllib.urlopen(urlonoff)

- Maak het script executable met commando
code:
1
sudo chmod +x ginlong.py
terwijl je in de directory staat waar je 'm neer hebt gezet. Ik doe (vanwege gebrek aan kennis ook altijd nog [code][sudo chmod 777 ginlong.py/code] zodat alle users er iets mee kunnen. Hoeft allicht niet en is niet goed, maar ignorance is bliss zullen we maar zeggen ;)
- Draai het script even een keer op het apparaat en check dat je output krijgt te zien op de commandline
Ik start het script met dit commando:
code:
1
sudo /usr/bin/python /usr/local/bin/ginlong.py

Heb je output? Top! Dan heb je hoogstwaarschijlijk iig ook een beginwaarde in je Domoticz metertje, hiep hoi!
- Maak nu in Domoticz nóg een switch aan, gewoon Manual met willekeurige instellingen. Open de switch en maak er een "Push On" knoppie van. Neem in de aan en uit acties het script op, zie de bijgevoegde screenshot.
Als je deze configuratie gebruikt (dus "script://ginlong.sh") dan ga je er dus vanuit dat het script in de "scripts" map zich onder/in de "domoticz-installatiemap" bevindt. Is dat niet het geval, moet je het pad opnemen (even googlen hoe je het pad moet invullen)
- Druk de update-knop in en check dat de waardes geüpdate worden
- Nu komt de clou: Het script eens per X-tijd laten draaien. Ik ben geen Linux/Raspbian held en kreeg het met een crontab-job met geen mogelijkheid aan de praat. Ook het zetten van een timer op de virtuele switch waarbij ik het script onderwater start werkte niet (wazige foutmelding in de Domoticz-logs). Zal allicht aan mij liggen en heeft mogelijk iets van doen met rechten en onder welke user dingen draaien, maar afijn.
Ik heb het uiteindelijk aan de praat gekregen met een dzVents-script dat er zo uitziet:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
 return {
        
    on = { timer = {"every 5 minutes"} },
    
    execute = function(domoticz, _)
        local myDevice = domoticz.devices("Zonnepanelen Update")
        if myDevice.state == "On" then
            myDevice.switchOn()
        else
            myDevice.switchOn()
        end
    end     
}

Dus: Zet eens per 5 minuten dit apparaat aan. Again: Zal allicht beter kunnen, maar het ignorance ding, en if it ain't broken, don't fix it (en andere wijsheden ;))

Disclaimers en verdere info:
- Ik ben geen programmeur, developer of wat dan ook, puur hobbyist. Heb hier een beetje Python en meer JSON voor moeten "leren", maar ik ben gee export. Dus garantie tot aan de deur en ik zal het allicht niet ultiem efficiënt aangepakt hebben... ;)
- Ik lees alleen het huidige verbruik en de status uit. De status heeft meerdere waardes die kunnen (0 = uit, 1 = aan, 2 = ook iets?) maar het switch snapt alleen 0 en 1. Wat de andere statussen betekenen, schiet mij maar lek, enlighten me als je het weet :)
- In de JSON die wordt opgehaald zitten meer waardes waar je mogelijk iets mee kunt. Lukte mij niet vlot en leek me niet ultiem nuttig, dus dit is waar ik het bij houd. Voel je vrij "door te ontwikkelen"
- Ik heb geen aspiraties om hierop door te ontwikkelen oid, voor mij is het prima zo. Dus leef je uit, maar verwacht niks van mij ;)
- Credits voor het grootste deel van de scripting gaan naar de mensen die dit vóór mij al hadden gemaakt. Ik heb alleen een beetje copy/paste/aanpas werk gedaan

Hopelijk hebben mensen hier iets aan, ik ben er blij mee (en stiekem ook wel een beetje trots op, gotta be honest ;)). Het eindresultaat ziet er zo uit:


En nu stop ik met typen, zere vingers. ;)

I see dead pixels...



Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Microsoft Xbox Series X LG CX Google Pixel 5a 5G Sony XH90 / XH92 Samsung Galaxy S21 5G Sony PlayStation 5 Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True