Adapter für ioBroker

Z.B. HomeMatic, MAX! und andere
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

So 19. Jan 2020, 19:57

Falls gewünscht, kann ich euch gerne ein Script zur Verfügung stellen, um die Temperatur vom LMA per MQTT zum iobroker zu schicken. Habe ich bereits selbst seit Monaten im Einatz.
Ich habe meinen LMA mittlerweile von allen Steuerungsaufgaben befreit und er dient mir nur noch als "dummes" Gateway für sämtliche Funk Dinge. Alle neuen Dinge die angeschafft werden, haben nur noch WLAN und der Status kann abgefragt werden.

Die Funkrauchmelder lasse ich über den LMA einen API Request an den Iobroker direkt senden, damit die Raucherkennung auch über den Iobroker funktioniert. Hier kann ich euch auch gerne die Infos zukommen lassen, wie ich das gemacht habe.
Dos
Beiträge: 379
Registriert: Di 13. Sep 2016, 18:19

So 19. Jan 2020, 22:15

Gerne, als her damit :D
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

So 19. Jan 2020, 22:51

Wenn ihr eh iobroker am Start habt, habt ihr vermutlich einen Raspberry oder ein andere Linux System am laufen. Daher einfach in eurem Home Ordner einen neuen Ordner mit dem Namen "bin" erstellen und darin das eigentliche Script mit dem Namen "lma_tempstats2mqtt.sh" erstellen und dem Inhalt von unten füllen.

Danach muss das ganze noch Ausführbar gemacht werden:

Code: Alles auswählen

chmod +x  /home/pi/bin/lma_tempstats2mqtt.sh
Danach einen Cron Job erstellen der wie folgt aussieht:

Code: Alles auswählen

* * * * * /home/pi/bin/lma_tempstats2mqtt.sh
Das eigentliche Script, nimmt alle channels aus der weather.json und schickt sie per mqtt an den mqtt Broker, den habt ihr eh vermutlich bereits im IoBroker für andere Dinge aktiv, dann könnt ihr dort eure Temperaturstatistiken für Blockly Scripte etc nutzen.

IP-Adressen und User und Passwort müsst ihr natürlich anpassen.

Viel Spaß

Code: Alles auswählen

#!/bin/bash
# ########################################################################### #
# =========================================================================== #
# Filename:     lma_tempstats2mqtt.sh
# Author:       BooosesThaSnipper
# Version:      1.0
# Date:         2019-04-23
# Project:      SmartHome
# =========================================================================== #
# Description:
# A script to pull weather data from LightManager and publish it via mqtt
# =========================================================================== #
# ########################################################################### #



# ########################################################################### #
# =========================================================================== #
# START - Declaration of Variables

# Enter your LightManager Air IP
LMA_IP='192.168.x.x'

# Weather Temp File
LMA_TEMP='/tmp/weather.json'

# MQTT Broker Server
MQTT_SERVER="192.168.x.x"
MQTT_PORT="1883"
MQTT_USER="MQTTUSER"
MQTT_PASSWORD="MQTTPASSWORD"

# END - Declaration of Variables
# DO NOT CHANGE ANYTHING ABOVE THIS LINE
# =========================================================================== #
# ########################################################################### #



# ########################################################################### #
# =========================================================================== #

# Check if all needed binaries are installed
BINS="jq curl mosquitto-clients"

for BIN in ${BINS}; do
        STATUS_BIN=$( dpkg -s ${BIN} &> /dev/null; echo $? )
        if [ $STATUS_BIN -ne 0 ]; then
                echo "${BIN} is not installed"
                echo "Command for installing ${BIN}: \"sudo apt-get install ${BIN}\" "
                exit 1
        fi
done

# Save weather.json local for fast processing
curl --silent http://${LMA_IP}/weather.json > ${LMA_TEMP}

# Get information from weather.json and push it into InfluxDB
for i in $( for j in `seq 0 11`; do echo "channel${j}"; done ); do

        # Get Temperature
        TEMPERATURE=$( jq -r ".${i}.temperature" ${LMA_TEMP} )

        # Get Humidity and check value
        HUMIDITY=$( jq -r ".${i}.humidity" ${LMA_TEMP} )

        # Send value to mqtt broker
        /usr/bin/mosquitto_pub -h ${MQTT_SERVER} -p ${MQTT_PORT} -u ${MQTT_USER} -P "${MQTT_PASSWORD}" -t "lightmanger/weather/$i/temperature" -m "${TEMPERATURE}"
        /usr/bin/mosquitto_pub -h ${MQTT_SERVER} -p ${MQTT_PORT} -u ${MQTT_USER} -P "${MQTT_PASSWORD}" -t "lightmanger/weather/$i/humidity" -m "${HUMIDITY}"

done

rm -f $LMA_TEMP

# =========================================================================== #
# ########################################################################### #

exit

spy-1
Beiträge: 295
Registriert: Mo 7. Mär 2016, 10:51

Mo 20. Jan 2020, 07:58

Hi, das hört sich ja gut an.
Theoretisch müsste das das doch auch so mit den Markern gehen um den Status, z.B. an die Homebridge, via MQTT zu übermitteln.
Kenn sich damit jemand aus und könnte helfen?
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

Mo 20. Jan 2020, 11:26

Du kannst die natürlich auch übermittelt. In dem Fall halt nur true und false.

Hab ich auch schon gebastelt. Nachteil ist, diese werden nur minütlich übermittelt. Daher hab ich für die Rauchmelder den API Aufruf von iobroker in meine entsprechenden Szenen gebaut.

Kann ich euch auch gerne zeigen wie ich das gebaut habe.
spy-1
Beiträge: 295
Registriert: Mo 7. Mär 2016, 10:51

Mo 20. Jan 2020, 14:15

Mich würde es, wenngleich ich keinerlei Prorammierkenntnisse habe, interessieren.
Die LM-Aktoren sind die Einzigen von denen ich in Homekit keine Stausmeldung bekomme.
Da ürde ich gerne ändern ;-)
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

So 26. Jan 2020, 12:40

Hier die Anleitung wenn ihr minütlich die Marker Stats vom LMA per MQTT übertragen wollt


Wenn ihr eh iobroker am Start habt, habt ihr vermutlich einen Raspberry oder ein andere Linux System am laufen. Daher einfach in eurem Home Ordner einen neuen Ordner mit dem Namen "bin" erstellen und darin das eigentliche Script mit dem Namen "lma_marker2mqtt.sh" erstellen und dem Inhalt von unten füllen.

Danach muss das ganze noch Ausführbar gemacht werden:

Code: Alles auswählen

chmod +x  /home/pi/bin/lma_marker2mqtt.sh
Danach einen Cron Job erstellen der wie folgt aussieht:

Code: Alles auswählen

* * * * * /home/pi/bin/lma_marker2mqtt.sh
Das eigentliche Script, nimmt alle Marker aus der params.json und schickt sie per mqtt an den mqtt Broker, den habt ihr eh vermutlich bereits im IoBroker für andere Dinge aktiv, dann könnt ihr dort eure Marker für Blockly Scripte etc nutzen.

IP-Adressen und User und Passwort müsst ihr natürlich anpassen.

lasst am Anfang das Script einmal per Hand laufen, es überprüft ob alles notwendige installiert ist und falls nicht zeigt es euch, wie ihr das tun könnt. und das geht wie folgt:

Code: Alles auswählen

/home/pi/bin/lma_marker2mqtt.sh
Viel Spaß

Code: Alles auswählen

#!/bin/bash
# ########################################################################### #
# =========================================================================== #
# Filename:     lma_marker2mqtt.sh
# Author:       BooosesThaSnipper
# Version:      1.0.0
# Date:         2020-01-26
# Project:      SmartHome
# =========================================================================== #
# Description:
# A Script to pull marker status from LMA und publish it via mqtt
# =========================================================================== #
# ########################################################################### #


# ########################################################################### #
# =========================================================================== #
# START - Declaration of Variables

# Enter your LightManager Air IP
LMA_IP='192.168.x.x'

# MQTT Broker Server
MQTT_SERVER="192.168.x.x"
MQTT_PORT="1883"
MQTT_USER="MQTTUSER"
MQTT_PASSWORD="MQTTPASSWORD"

# END - Declaration of Variables
# DO NOT CHANGE ANYTHING ABOVE THIS LINE
# =========================================================================== #
# ########################################################################### #


# ########################################################################### #
# =========================================================================== #
# Check needed Packages

# List of required packages
PACKAGES='curl jq bc mosquitto-clients'

for PACKAGE in ${PACKAGES}; do
        # Check if package is installed
        STATUS_PACKAGE=$( dpkg -s ${PACKAGE} 2> /dev/null | grep -q "Status: install ok installed"; echo $? )
        if [ ${STATUS_PACKAGE} -ne 0 ]; then
                echo "${PACKAGE} is not installed"
                echo "Command for installing ${PACKAGE}: \"sudo apt-get install ${PACKAGE}\" "
                exit 1
        fi
done

# Define binary Path
BIN_CURL=$( which curl )
BIN_JQ=$( which jq )
BIN_WC=$( which wc )
BIN_BC=$( which bc )
BIN_MOSQUITTO=$( which mosquitto_pub )

# =========================================================================== #
# ########################################################################### #


# ########################################################################### #
# =========================================================================== #
# Check Marker Status

# Get actual Marker Status from LMA
PARAMS_TEMP=$( tempfile )
${BIN_CURL} -s http://${LMA_IP}/params.json > ${PARAMS_TEMP}
MARKER_COUNT=$( echo $( ${BIN_JQ} -r '.["marker state"]' ${PARAMS_TEMP} | ${BIN_WC} -m ) -1 | ${BIN_BC} )

for MARKER in `seq 1 ${MARKER_COUNT}`; do
        MARKER_STATUS=$( printf  "%${MARKER_COUNT}.${MARKER}s\n" $( ${BIN_JQ} -r '.["marker state"]' ${PARAMS_TEMP} ) | awk '{print substr($0,length,1)}' )

        # Check Marker Status
        if [ ${MARKER_STATUS} -eq 0 ]; then
                STATUS=false
        elif [ ${MARKER_STATUS} -eq 1 ]; then
                STATUS=true
        fi

         # Send value to mqtt broker
        ${BIN_MOSQUITTO} -h ${MQTT_SERVER} -p ${MQTT_PORT} -u ${MQTT_USER} -P "${MQTT_PASSWORD}" -t "lightmanger/marker/${MARKER}/status" -m ${STATUS}
done

exit

# Delete LMA params file
rm -f ${PARAMS_TEMP}

# =========================================================================== #
# ########################################################################### #

exit
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

So 26. Jan 2020, 12:56

Wer Marker innerhalb einer Funkszene in "Echtzeit" übertragen möchte muss wie folgt vorgehen:

- innrhalb vom ioBroker den Adapter "simple-api" installieren
- in den Einstellungen wie folgt vorgehen:
-- Erweitern Sie den WEB-Adapter: "keins"
--- IP: "0.0.0.0 - Alle IPs zulassen"
-- Port: 8088
-- Verschlüsselung (HTTPS): "Deaktiviert" (Leider hat der LMA Probleme wie üblich Probleme mit SSL daher gehts leider nicht anders)
-- Authentifikation "Aktiviert"
-- Nur erlauben wenn Anwender auch Besitzer ist: "deaktiviert"
-- Datenquelle auswählen: "Keins"
-- Alle Datenpunkte auflisten: "aktiviert"

Danach den Adapter starten und schauen ob die Lampe entsprechend grün ist. Aus Sicherheitsgründen arbeite ich immer mit der Authentifikation vom iobroker, Login ohne User und Passwort halte ich für grob fahrlässig. Wer es dennoch ohne betreibt sollte dies auf eigene Verantwortung tun. Klar ohne SSL Ist es ein wenig doof, aber besser als gar keine Sicherheit.

Nun wechselt ihr ins Air Studio und legt euch neue LAN Aktoren an: Methode "GET", vier Werte müsste ihr noch anpassen:
IP-Adresse vom ioBroker
$MARKER = den Marker angeben, also zum beispiel Nummer 5
$USER = iobroker Username
$PASSWORD = Iobroker Password

Taste 1: "TRUE"

Code: Alles auswählen

192.168.x.x:8088/set/mqtt-client.0.lightmanger.marker.$MARKER.status?value=true&user=$USER&pass=$PASSWORD
Taste 2: "FALSE"

Code: Alles auswählen

192.168.x.x:8088/set/mqtt-client.0.lightmanger.marker.$MARKER.status?value=false$user=$USER&pass=$PASSWORD

Damit könnt ihr mit einem Aktor die entsprechenden Infos direkt übertragen. Da ich der Zuverlässigkeit nicht immer gnaz traue, lasse ich parallel dazu, das Marker Script laufen, welches minütlich die Marker überträgt. Ich habe bei mir keine Szenen die kurze intervalle haben, daher passt das für mich so.
Falls nicht, solltet ihr auf alle Fälle das Script 1x laufen lassen, damit sämtliche Einträge angelegt werden. Sollte ihr anstelle des MQTT-Clients den MQTT Broker/Client nutzen, müsst ihr oben beim LAN Aktor den Pfad anpassen, also mqtt-client.0 zu mqtt.0. oder falls ihr mehrere Instanzen laufen habt, die Instanzzahl von 0 hochzählen. Sollte bei der Nutzung von iobroker aber bekannt sein.

Grüße
Markus
spy-1
Beiträge: 295
Registriert: Mo 7. Mär 2016, 10:51

So 26. Jan 2020, 17:28

Danke Dir für Deine Mühen.
Da ich Homebridge einsetze und mit ioBroker keinerlei Erfahrung habe, werde ich mich erstmal einlesen.
Ich weiss wohl, dass man beide Systeme parallel laufen lassenkann. Dann hörst aber schon auf.
Benutzeravatar
BooosesThaSnipper
Beiträge: 323
Registriert: Mi 24. Feb 2016, 15:10

So 26. Jan 2020, 17:54

Unterstützt Homebridge nicht auch eine Anbindung per MQTT?
MQTT ist ja nur ein zentrales Message Protokoll, dass von diversen Tools genutzt wird. Iobroker ist nur eins davon. Node Red glaube ich auch.

Versuch erstmal den Weg.
Antworten