Günstiger und unauffälliger Pflanzensensor: Xiaomi Flower Monitor

Begonnen von stoxx, 17 September 2016, 14:28:54

Vorheriges Thema - Nächstes Thema

JoWiemann

#75
OK, habe das Script erweitert:


#!/bin/bash
bluetoothmac="C4:7C:8D:61:B2:72"
fhem_device="Plant1"

stringA=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x35 2> errFile)
stringB=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x38 2> errFile)
gaterror=$?
ERR=$(<errFile)

if [ $gaterror -ne 0 ]; then
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool Fehler: $ERR"
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device state error"
  sudo hciconfig hci0 down
  sudo btmgmt le on
  sudo btmgmt bredr off
  sudo hciconfig hci0 up
  if [ $? -ne 0 ]; then
    sudo hciconfig hci0 up
  fi
else
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool_35 $stringA"
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool_38 $stringB"

  stringT=${stringA:36:2}${stringA:33:2}
  stringT=$(echo "$stringT" | tr a-f A-F)
  stringT=$(echo "ibase=16; $stringT" | bc)
  perl /opt/fhem/fhem.pl 7072 "{fhem('setreading $fhem_device Temp ' . $stringT/10)}"

  stringL=${stringA:45:2}${stringA:42:2}
  stringL=$(echo "$stringL" | tr a-f A-F)
  stringL=$(echo "ibase=16; $stringL" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Lux $stringL"

  stringM=${stringA:54:2}
  stringM=$(echo "$stringM" | tr a-f A-F)
  stringM=$(echo "ibase=16; $stringM" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Moisture $stringM"

  stringF=${stringA:60:2}${stringA:57:2}
  stringF=$(echo "$stringF" | tr a-f A-F)
  stringF=$(echo "ibase=16; $stringF" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Fertility $stringF"

  stringV=${stringB:33:2}
  stringV=$(echo "$stringV" | tr a-f A-F)
  stringV=$(echo "ibase=16; $stringV" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Battery $stringV"

  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device state done"
fi
exit


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

jnewton957

Hallo,

ich habe es endlich auch geschafft.

Script läuft, Daten sind in FHEM.

Für alle, die dann am Ende noch Probleme haben, die Daten nach FHEM zu bekommen. Bitte prüfen, ob ihr 7072 oder 7073 bei tPortLocal telnet habt. Bei mir hat eben 7072 ein passwort wegen normalen telnet port und 7073 wegen local telnet eben nicht. Daher bei mir: perl /opt/fhem/fhem.pl 7073 "setreading Plant1

Sonntag fast rum.

Viel Erfolg für die Anderen

Jörg
FHEM6.2 auf Pi5
V 1.66 nanoCUL 433 (IT)
V 1.66 nanoCUL868 (HM)
sqlite3 LogDb
ELRO AB440, DECT200,  TFA30.3125, esp8266, HM, TabletUI, IR-Schreiblesekopf (Udo),tibber Pulse, Kostal Pico, cfos Wallbox, Modbus TCP

JoWiemann

#77
Hallo,

ich habe das Script noch ein zweites mal gepimmt.


#!/bin/bash
fhem_telnet_port=7072
fhem_device="Plant1"
fhem_dir="/opt/fhem"
bluetoothmac="C4:7C:8D:61:B2:72"

function Plantdecode {
  funcStr=$1
  funcStr=$(echo "$funcStr" | tr a-f A-F)
  funcStr=$(echo "ibase=16; $funcStr" | bc)
  echo "$funcStr"
}

perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device state get data from handle 0x35"
stringA=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x35 2> errFile)

perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device state get data from handle 0x38"
stringB=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x38 2> errFile)
gaterror=$?

repl="'"

if [ $gaterror -ne 0 ]; then
  ERR=$(<errFile)
  ERR=${ERR//$repl/_}
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'gatttool: $ERR'}"

  perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool Fehler: $ERR"
  perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device state error"
  perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool_35 ---"
  perl /opt/fhem/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool_38 ---"

  sudo hciconfig hci0 down 2> errFile
  if [ $? -ne 0 ]; then
    ERR=$(<errFile)
    ERR=${ERR//$repl/_}
    perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'hciconfig: $ERR'}"
    exit
  fi

  sudo btmgmt le on 2> errFile
  if [ $? -ne 0 ]; then
    ERR=$(<errFile)
    ERR=${ERR//$repl/_}
    perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'btmgmt: $ERR'}"
    exit
  fi

  sudo btmgmt bredr off 2> errFile
  if [ $? -ne 0 ]; then
    ERR=$(<errFile)
    ERR=${ERR//$repl/_}
    perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'btmgmt: $ERR'}"
    exit
  fi

  sudo hciconfig hci0 up 2> errFile
  if [ $? -ne 0 ]; then
    ERR=$(<errFile)
    ERR=${ERR//$repl/_}
    perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'hciconfig: $ERR'}"

    sudo hciconfig hci0 up 2> errFile
    if [ $? -ne 0 ]; then
      ERR=$(<errFile)
      ERR=${ERR//$repl/_}
      perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{Log3 '$fhem_device', 3, 'hciconfig: $ERR'}"
    fi
  fi
else
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool ---"
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool_35 $stringA"
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device gattool_38 $stringB"

  string=$(Plantdecode ${stringA:36:2}${stringA:33:2})
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "{fhem('setreading $fhem_device Temp ' . $string/10)}"

  string=$(Plantdecode ${stringA:45:2}${stringA:42:2})
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device Lux $string"

  string=$(Plantdecode ${stringA:54:2})
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device Moisture $string"

  string=$(Plantdecode ${stringA:60:2}${stringA:57:2})
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device Fertility $string"

  string=$(Plantdecode ${stringB:33:2})
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device Battery $string"

  string30="30"
  stringF1=${stringB:39:2}
  stringF1=$((stringF1-string30))
  stringF2=${stringB:45:2}
  stringF2=$((stringF2-string30))
  stringF3=${stringB:51:2}
  stringF3=$((stringF3-string30))
  string="$stringF1"."$stringF2"."$stringF3"
  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device Firmware $string"

  perl "$fhem_dir"/fhem.pl $fhem_telnet_port "setreading $fhem_device state done"
fi
Exit


Grüße Jörg
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

CoolTux

Besteht noch Interesse an einem Modul? Dann würde ich vorerst eines zusammen stellen bis das BT Framework fertig ist.
Ausserdem brauche ich dann mal ein Telegramm von jemanden.
Also einfach ein
gatttool -b $bluetoothmac --char-read --handle=0x35
gatttool -b $bluetoothmac --char-read --handle=0x38

Machen und Ergebnis hier posten.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

CoolTux

Zitat von: JoWiemann am 30 Oktober 2016, 14:22:01
OK, habe das Script erweitert:


#!/bin/bash
bluetoothmac="C4:7C:8D:61:B2:72"
fhem_device="Plant1"

stringA=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x35 2> errFile)
stringB=$(/usr/local/bin/gatttool -b $bluetoothmac --char-read --handle=0x38 2> errFile)
gaterror=$?
ERR=$(<errFile)

if [ $gaterror -ne 0 ]; then
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool Fehler: $ERR"
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device state error"
  sudo hciconfig hci0 down
  sudo btmgmt le on
  sudo btmgmt bredr off
  sudo hciconfig hci0 up
  if [ $? -ne 0 ]; then
    sudo hciconfig hci0 up
  fi
else
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool_35 $stringA"
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device gattool_38 $stringB"

  stringT=${stringA:36:2}${stringA:33:2}
  stringT=$(echo "$stringT" | tr a-f A-F)
  stringT=$(echo "ibase=16; $stringT" | bc)
  perl /opt/fhem/fhem.pl 7072 "{fhem('setreading $fhem_device Temp ' . $stringT/10)}"

  stringL=${stringA:45:2}${stringA:42:2}
  stringL=$(echo "$stringL" | tr a-f A-F)
  stringL=$(echo "ibase=16; $stringL" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Lux $stringL"

  stringM=${stringA:54:2}
  stringM=$(echo "$stringM" | tr a-f A-F)
  stringM=$(echo "ibase=16; $stringM" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Moisture $stringM"

  stringF=${stringA:60:2}${stringA:57:2}
  stringF=$(echo "$stringF" | tr a-f A-F)
  stringF=$(echo "ibase=16; $stringF" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Fertility $stringF"

  stringV=${stringB:33:2}
  stringV=$(echo "$stringV" | tr a-f A-F)
  stringV=$(echo "ibase=16; $stringV" | bc)
  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device Battery $stringV"

  perl /opt/fhem/fhem.pl 7072 "setreading $fhem_device state done"
fi
exit


Grüße Jörg
Wo kommt eigentlich auf einmal die 0x38er Adresse her?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Pyromane

Zitat von: CoolTux am 31 Oktober 2016, 09:19:36
Wo kommt eigentlich auf einmal die 0x38er Adresse her?
jnewton957 Hatte dazu etwas geschrieben:
Zitat von: jnewton957 am 30 Oktober 2016, 13:25:13
Interessant ist auch handle =0x38 da hier der Batteriestatus drin ist. hex 64 = 100%

CoolTux

Ah super. Dann bitte noch ein Telegramm damit ich was zum testen habe.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Hagenuck1

#82
Zitat von: JoWiemann am 30 Oktober 2016, 19:36:53
Hallo,

ich habe das Script noch ein zweites mal gepimmt.

Code....

Grüße Jörg

Hallo Jörg, habe das gerade nochmal mit dieser Version versucht, die klappt so aber aufgrund der folgenden zwei Punkte nicht:
Das gatttool steht im path und sollte daher ohne den kompletten Pfad angegeben sein, da er den Befehl (zumindest bei mir) sonst aufgrund eines "File not Found" Fehlers abbricht.
Ganz am Ende das "Exit" muss kleingeschrieben werden ;)

EDIT: Was ich noch festgestellt habe ist, dass seit dem "errFile" ein Permission denied Fehler auftaucht und die beiden neusten Scripte deshalb nicht laufen. Worauf will er in diesem Moment zugreifen? Bin da nicht so ganz draus schlau geworden wohin er das schreiben will. chmod 777 für das Verzeichnis in dem das Script liegt hat es gelöst ;) Ich weiß, 777 ist nicht das sinnigste, aber da liegen nur Scripte, die fhem ausführen können soll.

Aus der ssh-Verbindung heraus läuft es bei mir nun, dann will ich mich mal auf der FHEM Seite daran versuchen.

EDIT2: Läuft nun alles.
Berechtigungen, die benötigt werden: (sudo nano /etc/sudoers)
fhem ALL=NOPASSWD: /opt/fhem/SCRIPTS/
Dadurch hat der user fhem in diesem Verzeichnis root-Rechte, kann die Scripte ausführen und auch Dateien erstellen.

JoWiemann

Da hat die Rechtschreibkorrektur beim exit zugeschlagen. Den Pfad zum gatttool brauche ich bei mir. Aus Fhem heraus findet das Script das gatttool nicht. Und ich hatte bisher keine Zeit die Ursache zu suchen, denn auf der Konsole funktioniert es.

Grüße Jörg


Gesendet von iPhone mit Tapatalk
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

mi.ke

Moin.

Da ich ja mit einer Schmach gegen die Maschine nicht zurechtkomme . . .  ich habs auch hinbekommen.

Allerdings musste ich Wheezy runterwerfen und neu Jessy installieren.
Dann war es allerdings kein Problem mehr.

Ich nehmen an das es an der BlueZ Version lag.
Die "alte", nicht funktionierende war 4.99, die jetztige ist 5.23  (bluetoothd -v)

Vielen Dank für die Unterstützung

greetz
MI/KE
FHEM 5.9 | RPi4 + 5 x RPi(Z) + FB7590 + FB 6890 LTE via LAN und WAN (VPN) verbunden.
2 x CUL868 + 3 x RFXTRX(e) + 6 x HMwLanGW + 4 x z2tGw + 5 x LGW + 2 x IRBlast + CO2 +++
FS20, FHT, FMS, Elro(mod), CM160, Revolt, LGTV, STV, AVR, withings, HM-sec-*, HM-CC-RT-DN, AMAD, PCA301, arlo, Aqara

Invers

Ich habe gerade ebend meinen Sensor eingerichtet.
Hat auch auf Anhieb mit den Beiden Änderungen geklappt.

Muss ich das Script nun selber ständig aufrufen, oder erfolgt die Abfrage zyklisch ohne mein Zutun?

Bitte um Entschuldigung, falls das eine zu doofe Frage ist, aber ich habe keinerlei Kenntnisse in puncto Bashscript.

Falls ich es ständig anstossen muss - wie bitte mache ich das?

EDIT:
Hat sich erledigt, ich versuche cronjob
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Pythonf

Hat jemand Erfahrung wie es bei dem Sensor mit der Messtechnik aussieht. Gibt ja häufig das Problem gerade bei günstigen Sensoren, dass sie über die Leitfähigkeit messen und dabei die Erde mit Schwermetallen kontaminieren und sich selbst langsam abnutzen? Hat jemand hier Erfahrungen?

Grüße
Fabian

RitterSport

Habe jetzt hier auch 2 davon liegen, allerdings noch kein Bluetooth-Dongle für den Raspi.

Finden lässt er sich nicht mit einem iPhone5s, aber mit einem Android Tablet konnte ich connecten.
Kennt jemand eine App für das Teil? 

Amenophis86

Ob es den Post noch ein viertes Mal geben wird? Taptalk lässt grüßen :D
Aktuell dabei unser neues Haus mit KNX am einrichten. Im nächsten Schritt dann KNX mit FHEM verbinden. Allein zwei Dinge sind dabei selten: Zeit und Geld...

Hagenuck1

#89
Fail.... naja, da ist mein Beitrag dahin, die Tapatalk app hatte nen Hänger....
habe es nun auch zum laufen bekommen. Es gibt zwei Apps. Eine von dem Entwickler Beijing Xiaomi..., die NICHT funktioniert. Und eine die unter "Flower Power" als 1. Ergebnis kommt und einen mit Chinesischen Schriftzeichen erschlägt. Die geht. Zumindest bei einem der beiden Sensoren...

Edit: Nachdem der eine nun mit der App läuft klappts im FHEM nicht mehr, da beim Update auf die Version 2.6.6, das zwingend bei der App erforderlich war anscheinend etwas geändert wurde und er den 35er wert nun nicht mehr direkt rausrückt.
Habe da auch schon was gefunden, dass ich noch testen müsste: https://wiki.hackerspace.pl/projects:xiaomi-flora

Gruß

Gesendet von iPhone mit Tapatalk