Wiffi-pump-4 ... JSON-Daten mit Phyton auslesen

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
T-Bone
Beiträge: 1
Registriert: 12.01.2023, 14:47
System: keine Zentrale (nur Pairing, FHEM etc.)

Wiffi-pump-4 ... JSON-Daten mit Phyton auslesen

Beitrag von T-Bone » 12.01.2023, 15:23

Liebe Homatic-Gemeinde,

ich habe für die Steuerung meiner WW-Zirkulationspumpe den Bausatz von Eugen Stall Wiffi-Pump 4 verwendet, um die Zirkulationspumpe meines Warmwasser-Speichers intelligent zu steuern.

Grundsätzlich wird die Wiffi-Pump 4 über einen Temperatursensor am Auslauf des Warmwasserspeichers gesteuert, dass ist bei Eugen Stall auf seiner Internetseite alles gut beschrieben.
Was mich ein bisschen "gestört" hat, in der Anleitung unter Punkt 16 "Montage des Temperatursensors" steht : Muß man halt etwas probieren! Um eine geeignete Stelle für den Sensor zu finden. Eine grobe Einschätzung hat Eugen gegeben, mit der man erst einaml anfangen kann, das ist gut, aber man muss trotzdem probieren.

Bei mir, und vermutlich bei vielen anderen auch, steht der Speicher im Keller, einen Wasserhahn habe ich im EG. D.h. es ist gar nicht so einfach und mit viel Lauferei verbunden, nur durch Probieren den richtigen Punkt zum Anbringen zu finden, außerdem man hat dafür keine validen Daten.

Mein Ansatz:
Ich habe mir ein kleines Programm in Phyton Version 3.11 geschrieben, dass von der Wiffi-Pump die JSON Daten abholt, in eine Datenbank schreibt und gleichzeitig auf dem Bildschirm ausgibt. In dem Programm kann ich das Abfrage-Intervall in Sekunden einstellen, und die Laufzeit in Minuten. Das gibt mir die Gelegenheit, entweder in kurzen Abständen bei einem Intervall von z.B. 10 Sekunden am Wasserhahn im EG zu schauen, ob die Wiffi-Pump beim Betätigen des Wasserhahns wirklich losläuft, bzw. wie sich die Temperatur ändert, aber auch Langzeitmassungen z.B. über Nacht, um zu schauen, ob die Pumpe nicht ungewollt losläuft, und wenn ja wann und wie oft. (das ist nämlich bei mir der Fall, ich weiß noch nicht genau warum.)

Vielleicht kann oder will nicht jeder die Werte mit der Homematic auslesen, oder hat, wie ich, keine Homematic Zentrale.
Das Script fragt 3 Parameter ab:
1.) Die IP Adresse der Wiffi-Pump im LAN
2.) Welches Abfrageintervall gewüscht wird
3.) Die Laufzeit in Minuten

Nach Programmstart gibt das Script bei jeder Abfrage die Zeit und den Temperaturwert auf dem Bildschirm aus. Außerdem ob die Pumpoe gerade läuft.
Gleichzeitig werden die Werte zur späteren Auswertung in eine Datenbank mit Namen wiffi_pump.db geschrieben. Diese datenbank lässt sich dann z.B. mit der Software "DB Browser for SQLite" ansehen.

Falls jemand Anregungen oder weitere Ideen zu dem Scipt hat, gerne eine Nachricht hinterlassen.

Hier das Phyton 3.11 script:

Code: Alles auswählen

import time
import requests
import json
import sqlite3
from datetime import datetime

#Anfangsbedingungen Anzahl der Werte und Laufzeit des Programms

intervall = 0
laufzeit = 0

ip = input('IP der Pumpe im LAN :')
intervall = int(input('Intervall der Werte in Sekunden? : '))
werte_minute = int(60/intervall)
print('Die Anzahl beträgt '+str(werte_minute)+' Werte pro Minute.')


laufzeit = int(input('Laufzeit des Programms in Minuten? : '))
print('Die Laufzeit des Programms beträgt '+str(laufzeit)+' Minuten.')

schleifen_zahl = werte_minute * laufzeit

print('Anzahl der Schleifen: '+(str(schleifen_zahl)))

verbindung = sqlite3.connect("wiffi_pump.db")#datenbank anlegen bzw. verbinden
zeiger = verbindung.cursor()#datenbank-zeiger


sql_datenbank = """CREATE TABLE IF NOT EXISTS wiffi_pump_werte (datum TEXT, zeit TEXT, wiffi_datum TEXT, wiffi_zeit TEXT,
                   wiffi_pump TEXT, wiffi_temp_Z REAL,wiffi_temp_A REAL, wiffi_temp_B REAL);"""

sql_insert = """INSERT INTO wiffi_pump_werte
                          (datum, zeit, wiffi_datum, wiffi_zeit, wiffi_pump, wiffi_temp_Z, wiffi_temp_A , wiffi_temp_B) 
                          VALUES (?, ?, ?, ?, ?, ?, ?, ?);"""

zeiger.execute(sql_datenbank)#Datenbankzeiger setzen
verbindung.commit()#Datenbank-Anweisung ausführen


for zahl in range(schleifen_zahl):  #Zählschleife


 while True:
  try:
   url = 'http://'+ip+'/json' #Url Wiffi_pump
   wiffi_pump_data = requests.get(url).json() #Holen der Json Info 
   break
  except IOError:
      time.sleep(10)# !0 Sekunden warten, bis neu versucht wird
      print('Daten nochmals holen! ')
 
 wp_data_json = json.dumps(wiffi_pump_data) #Umwandeln der Json Info 
 json_data = json.loads(wp_data_json)

 date = datetime.now()
 datum = date.strftime("%d.%m.%Y")
 zeit = date.strftime("%H:%M:%S")
 
 wiffi_zeitpunkt = json_data['Systeminfo']['zeitpunkt'] #wiffi_zeitpunkt
 wiffi_jahr = wiffi_zeitpunkt[0:4]
 wiffi_monat = wiffi_zeitpunkt[5:7]
 wiffi_tag = wiffi_zeitpunkt[8:10]
 wiffi_std = wiffi_zeitpunkt[12:14]
 wiffi_min = wiffi_zeitpunkt[15:17]

 wiffi_dat = wiffi_tag+'.'+wiffi_monat+'.'+wiffi_jahr
 wiffi_zeit = wiffi_std+':'+wiffi_min

 
 wiffi_temp_Z = json_data['vars'][1]['value'] #Temperatur Warmwasser
 wiffi_temp_A = json_data['vars'][2]['value'] #Vorlauf_Fussbodenheizung
 wiffi_temp_B = json_data['vars'][3]['value'] #Vorlauf_Radiatoren
 wiffi_pump = json_data['vars'][4]['value']# Status Zirkulationspumpe
 if wiffi_pump == 'false':
    wiffi_pump = ''
    wiffi_pump_an = ''
 else:
    wiffi_pump ='1'
    wiffi_pump_an =' Pumpe an'

 sql_data_tpl =  (datum, zeit, wiffi_dat, wiffi_zeit, wiffi_pump, wiffi_temp_Z , wiffi_temp_A, wiffi_temp_B) 
 zeiger.execute(sql_insert,sql_data_tpl) #Werte in Datenbank übertragen
        
 verbindung.commit() #Datenbank-Anweisung ausführen
 print ('Zeit : '+zeit+' Uhr  Temperatur: '+wiffi_temp_Z+' Grad Cesius'+wiffi_pump_an)
 time.sleep(intervall) #Programmstopp Sekunden
 
verbindung.close()#Datenbankverbindung schließen
print('')
print('Programm hat alle Werte in die Datenbank geschrieben.')
print('')
print('Ende des Programms!')

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“