CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Moderator: Co-Administratoren

Antworten
eagleflight
Beiträge: 26
Registriert: 10.05.2013, 08:13

CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Beitrag von eagleflight » 27.02.2019, 11:49

Aufgabe:
Es war angesagt die Pflanzen auf der Fensterbank und im Garten etwas genauer zu überwachen, zu gießen und die Werte zu protokollieren.
Homematic biete diese Sensoren nicht und so musste eine Alternative gefunden werden. Einige Werte aus der Homematic waren schon da (Wetterstation) und andere müssen zur Steuerung in die CCU übertragen werden.

Meine Lösung:
1. Systemvariablen aus der CCU3 auszulesen und über Raspberry in eine MSQL Datenbank auf ein Synology NAS zu schreiben
2. Systemvariablen von Sensoren die am Raspberry über WiFi und Bluetooth angeschlossen sind an die CCU zu senden

Das Ganze ist eine sehr preiswerte Lösung, Sensoren anzukoppeln die es für die Homematic so nicht gibt und damit Aktoren zu steuern.
Man sollte das aber als Bastel-Lösung betrachten und auf gar keinen Fall mit den WiFi Relais 220V ohne einschlägige Kenntnisse schalten.

Auf dem Raspberry läuft ein Python Skript das zyklisch alle 30 Minuten die Sensoren abfragt, die Werte aus der CCU ausliest und sendet und dann in die MYSQL Datenbank schreibt. Der Raspberry wird so als Datensammler und Slave für die angeschlossenen Sensoren und Relais benutzt. Die CCU3 macht das was sie soll, nämlich die Aktoren steuern. Dazu gibt es ja jede Menge Skripte bzw. Verknüpfungen von Aktoren mit den Systemvariablen.

Die Programmierung des Raspberries in Python ist auf Anfängerniveau und wird noch optimiert. Hauptsache ist aber das es funktioniert.

Nebenbei:
- Für die MiFlora sensoren gibt es auch eine hübsche Handyapp, die eine große Auswahl von Pflanzen mit Pflegeanleitung bietet und genau anzeigt wann man gießen und düngen soll. Eure Liebste wird begeistert sein !
- Das Luftdatenprojekt macht Spaß und man sieht wieviel Feinstaub wirklich bei uns rumfliegt.

Kosten (alles bei Ama**n):
- Raspberry Starterkit ~ 60€
- MiFLora Bluetooth Pflanzensensoren (Helligkeit, Bodenfeuchte, Temperature und Helligkeit) ~ 15€
- Nodemcu ESP32 WiFI mit Bodenfeuchtesensor ~ 12€
- Relais mit WiFI ESP8266 ~ 7€
- Luftdatensensor ~ 30€

In der CCU muss das XMLAPI installiert sein und es sind die benötigten Systemvariablen anzulegen, entsprechend zu füllen, bzw. zu benutzen.

Angeschlossen am Raspberry sind folgende Sensoren:
- MiFlora Bluetooth Pflanzensensoren (sehr preiswert und haltbar)
- BM280 Luftdruck/Temperatur
- extern etliche batteriebetriebene Mini WiFi ESP8266/32 (Nodemcu) mit Temperatur und Bodenfeuchtigkeitssensoren die
über den Mosquittoserver Daten an den Raspberry liefern
- einige Arduino WiFi Relais die mit 9V laufen um Ventile im Garten zu schalten
- Abfrage eines Feinstaubsensors über www.luftdaten.info, ein Open Project für Luftqualität

Raspberry Software installation:
- Mosquitto Server für WiFI Sensoren
- Python3 (standard) mit den notwendigen Bibliotheken

Hier ein paar Codeschnipsel in Python3 wie das alles funktioniert. Wer Interesse hat, kann gerne das ganze Skript haben. Insbesondere die Mosquitto Abfrage von den WiFi Nodemcu Sensoren ist etwas tricky und würde hier den Rahmen sprengen.

benötigte Python Bibliotheken

Code: Alles auswählen

import mysql.connector as mc                 # MYSQL Verbindung
import Python_DHT                                 # Thermosensor am Raspi
import lcddriver                                      # Anzeige der Werte an einem LCD
import time
import requests                                      # HTTP Koomunikation
from btlewrap.gatttool import GatttoolBackend          # Bluetooth Kommunikation
from miflora_poller import (                              
    MiFloraPoller, MI_CONDUCTIVITY, MI_MOISTURE, MI_LIGHT, MI_TEMPERATURE,
    MI_BATTERY,
)                                                            # MiFlora Abfrage 
from RPi import GPIO                             # ein paar LED's schaden auch nicht
from datetime import datetime
from shutil import get_terminal_size      # für die Anzeige auf der Konsole
import smbus                                         #  für weitere Analog sensoren an einem MCP3008 DA Wandler 
import paho.mqtt.client as mqtt            #  für die Abfrage des Mosquitto Servers
from queue import Queue                      #  dto  
import json                                           # Entschlüsselung der luftdaten werte
Arduino Relais Ansteuerung, dazu gibt es ein angepasstes Arduino script das auf den Relais läuft

Code: Alles auswählen

# IP Relais und Templates
IP_RELAY_GET_TEMPLATE = ('http://{}/{}{}')
IP_RELAY_01 = '192.168.10.53'

RELAY_PW  ="pw=xxx"
ON  = "ON"
OFF = "OFF"

# per WiFi verbundene Relais ansteuern
def ip_relay_switch(ip, pw, function):
    try:
        responses = requests.get(IP_RELAY_GET_TEMPLATE.format(ip, pw, function))
        if responses.status_code == 200 :
            status = "OK " + function 
        else :  
            status = "Failure"
    except:
        status = "Failure"
        
    return(status)

Homematic Systemvariable schreiben und lesen

Code: Alles auswählen

# Homematic Adresse
HOMEMATIC_SEND_TEMPLATE = ('http://192.168.10.10:8181/egal.exe?x=dom.GetObject("{}").State({})')
HOMEMATIC_GET_TEMPLATE = ('http://192.168.10.10/config/xmlapi/state.cgi?datapoint_id={}')

# Raspberry ->  CCU senden
def send_homematic(sensors,values):  # Systemvariablen auf Homematic schreiben
    responses = [
        requests.get(HOMEMATIC_SEND_TEMPLATE.format(homematic_name, value))
        for (_, homematic_name), value in zip(sensors, values)
        ]
    return(responses)

# von CCU empfangen
def get_homematic(datapoint):         # Systemvariablen von Homematic holen
    responses = requests.get(HOMEMATIC_GET_TEMPLATE.format(datapoint))
    result = responses.text           # Rückgabe von CCU   
    # responses.text = <?xml version="1.0" encoding="ISO-8859-1" ?><state><datapoint ise_id='18719' value='21.600000'/></state
    value= result[result.find('value') +7 : result.find('/') -1]  # suche nach value +7 zeichen und / -1 Zeichen
    return(value)

#----------------------------------#
# Werte an Homematic senden
responses = send_homematic(sensors, values)   # sensors: Liste mit Namen der Systemvariablen, values mit Werten
# responses 200 = alles ok, sonst fehler

# Werte von Homematic holen (Wind, Regen usw.)
datapoint = "2100"                 # Regen_heute        
                                            # id der SysVar aus http://meine.ccu.ip/config/xmlapi/sysvarlist.cgi
rain_today = int(float(get_homematic(datapoint)))   # Rückgabe als String (True, False, Text oder Zahl im float format
    
MiFlora Sensoren(Bluetooth) auf dem Raspi auslesen

Code: Alles auswählen

#Sensor Adressen
MIFLORA_MAC_ADDRESS_01 = 'C4:7C:8D:6A:5A:57'

def get_bluetooth_sensors(mac_adresse):
    # Bluetooth sensor(en) einlesen  
    # Liste mit NAmen der CCU3 Systemvariablen
    sensors = [
         (MI_TEMPERATURE, 'MiaFlora_Temp'),
         (MI_MOISTURE, 'MiaFlora_Humidity'),
         (MI_CONDUCTIVITY, 'MiaFlora_Conductivity'),
         (MI_LIGHT, 'MiaFlora_Brightness'),
         (MI_BATTERY, 'MiaFlora_Battery'),
              ]
    poller = MiFloraPoller(mac_adresse, GatttoolBackend)
    values = [poller.parameter_value(parameter) for parameter, _ in sensors]
    return(values, sensors, mac_adresse)
    
#------------------------------------------------------
# Mi Flora Abfrage
try:  
     values = list()
     sensors = list()
     values, sensors, sender_id = get_bluetooth_sensors(MIFLORA_MAC_ADDRESS_01)
except:
     pass
    
Letzlich die Speicherung in die MySQL Datenbank:

Code: Alles auswählen

def save_msql(values): 
    try :
       # Datenbank öffnen
       db = mc.connect(host="192.168.10.111", port="3307", user="Raspi", password="xxxxxx", database="sensor-log")
       db.autocommit = False
       cursor = db.cursor()
       # Datenbank schreiben mit den entsprechenden Feldern
       cursor.execute(
               'INSERT INTO BlueTooth_01(datum, temp, humidity, conductivity,'
               ' brightness, battery, sender_id, board_temperature, board_humidity, particle, air_pressure, rain_today, sun_today,'
               ' V_01,V_02, V_03, V_04, V_05, V_06, V_07, V_08 ,VP_01,VP_02, VP_03, VP_04, VP_05, VP_06, VP_07, VP_08,'
               ' wifi_01_a_temp, wifi_01_a_humidity, wifi_01_s_moisture, wifi_02_a_temp, wifi_02_a_humidity, wifi_02_s_moisture  )'
               ' Values (NOW(), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s,'
                                '%s, %s, %s, %s, %s, %s, %s, %s,%s, %s, %s)',
                 values,
               )
       db.commit()       
    except :
       db.rollback()        
    finally :
       # und weider schließen
       cursor.close()
       db.close()
#------------------------------------------------------------
# Speichern in MYSQL
# erst alle Wertesammeln und in eine Liste übertragen
values = values + ([sender_id] + [board_temperature] +[board_humidity] + [particle] + [baro_pressure] +
                      [rain_today] + [sunlight_today] + voltages + percentages + esp_01_values + esp_02_values)

# dann über die Funktion speichern          
save_msql(values)
Das Projekt hat viel Spaß gemacht, wird noch erweitert und bietet auch wirklichen Mehrwert wie z.B. keine vertrockneten oder ertrunkenen Pflanzen mehr :)
------------------------------------------------------------------
107 Kanäle in 38 Geräten:
1x HM-Sec-MDIR, 1x HM-RC-19, 1x HMIP-SWDO, 2x HM-OU-CFM-Pl, 3x HM-CC-TC, 1x HmIP-eTRV-2, 3x HM-CC-VD, 1x HM-WDS40-TH-I, 1x HmIP-WRC6, 5x HM-LC-Sw1-Pl-2, 1x HM-Sen-DB-PCB, 1x HM-RC-P1, 1x HM-Sec-SD, 3x HM-Sec-SD-2, 1x HM-Sec-SD-2-Team, 3x HmIP-BROLL, 1x HM-LC-Dim1TPBU-FM, 1x HM-LC-Dim1T-Pl-2, 1x HM-SwI-3-FM, 1x HM-WDS30-OT2-SM-2, 1x HM-Sec-SCo, 2x HM-PB-2-WM55, 1x HM-WDS100-C6-O

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Beitrag von joni-blue » 01.12.2020, 19:29

Hallo zusammen,

müsste das ganze nicht auch direkt auf der CCU3 mit Node-RED funktionieren?
lg Jörn
Reboot tut gut ! ! !

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Beitrag von joni-blue » 23.12.2020, 21:42

Hallo zusammen,

kann mir hier jemand weiter helfen? CCU3 mit bluetooth aktiviert. Den sensor bekomme ich mit Namen über Lescan angezeigt. mehr aber nicht.
die node die ich hier gefunden habe scheint nicht richtig zu laufen da Objekte fehlen.

node-red-contrib-miflora
0.2.2
[object Object]
1, NodeentfernenAlle inaktivieren
inaktivieren
miflora
Reboot tut gut ! ! !

MathiasZ

Re: CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Beitrag von MathiasZ » 23.12.2020, 21:59

ich habe das seit ca 2 Jahren am laufen, allerdings auf IObroker mit den Adaptern BLE und rpi2.
Da die Verbindung eh nicht bis zur Fensterbank ins Wohnzimmer reicht, habe ich mir IObroker im Multihost aufgesetzt, einer der beiden steht im Wohnzimmer direkt neben den Blumen.
Für den Garten will ich dann das machen: https://technikkram.net/blog/2019/05/03 ... ment-85934
Das ist noch günstiger als die MI flora, weil man an der Platine bis zu 7 Feuchtigkeitssensoren anschließen kann.
Gruß,
Mathias

Benutzeravatar
joni-blue
Beiträge: 1171
Registriert: 04.01.2012, 12:20
System: CCU
Wohnort: Hannover
Hat sich bedankt: 6 Mal
Danksagung erhalten: 1 Mal

Re: CCU3 Kommunikation mit Raspberry und Bluetooth Pflanzensensoren uvm.

Beitrag von joni-blue » 23.12.2020, 22:05

Oh, schaue ich mal rein.
Einer hier der es direkt auf der Ccu3 mit redmatic laufen hat?
Reboot tut gut ! ! !

Antworten

Zurück zu „Sonstige Steuerungen und Visualisierungen“