Xiaomi Dafang - Einzelreadings aus MQTT-Device

Begonnen von loungelizard, 04 März 2018, 08:50:19

Vorheriges Thema - Nächstes Thema

loungelizard

Folgende Problemstellung:
Xiaomi Dafang WLAN-Kamera mit alternativer Firmware von https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks liefert als MQTT-Status nur einen zusammenhängenden Status-String.
Um daraus einzelne Userreadings zu machen, habe ich den folgenden Code zusammen gezimmert. Vielleicht hilft er anderen auch.

Wenn es Tipps zu optimierterem Coding gibt, gerne her damit.


sub findValueInReading($$$) {


my $DeviceToRead=shift;
my $ReadingToRead=shift;
my $ValueToSearch=shift;
my $totalValue=ReadingsVal($DeviceToRead,$ReadingToRead,0);

#Log 1, "UTIL:findValueInReading: Device: ".$DeviceToRead." - Reading:".$ReadingToRead. " - Value:".$ValueToSearch. " - Reading:".$totalValue;


# Werte kommen im String wie folgt: "Wert":"tatsächlicher Wert"
# Gedanke: Suche die erste Position des Vorkommens "Wert"
# Dann beginnt der Substring an der Position +3 und endet am nächsten Vorkommen von '"'

my $pos1=index($totalValue,$ValueToSearch);
if ($pos1 != -1) {



my $finalPos=$pos1+length($ValueToSearch)+3;
# die 3 kommt von '":"

my $newValue=substr($totalValue,$finalPos);

#nächstes '"' suchen

my $endOfString=index($newValue,'"');

my $finalValue=substr($newValue,0,$endOfString);
#Log 1, "UTIL:findValueInReading: pos1: ".$pos1." - finalPos:".$finalPos. " - newValue:".$newValue. " - endOfString:".$endOfString;

return $finalValue;

}
return "not found";


}


Anschließend noch die Userreadings entsprechend einrichten.
Meine Kamera ist als MQTT-Device wie folgt in FHEM eingerichtet:


nternals:
   CFGFN     
   IODev      mqtt
   NAME       cam_dafang_status
   NR         288652
   STATE      incoming publish received
   TYPE       MQTT_DEVICE
   READINGS:
     2018-03-04 08:45:03   Bitrate         72.2 Mb/s
     2018-03-04 08:45:03   IR-Cut          off
     2018-03-04 08:45:03   LED_Blue        on
     2018-03-04 08:45:03   LED_IR          off
     2018-03-04 08:45:03   LED_Yellow      off
     2018-03-04 08:45:03   Linkquality     100%
     2018-03-04 08:45:03   NoiseLevel      0%
     2018-03-04 08:45:03   RTSP-Server     running
     2018-03-04 08:45:03   SSID           xxx
     2018-03-04 08:45:03   SignalLevel     75%
     2018-03-04 08:45:03   Status          {"Uptime":" 08:45:23 up 1 day, 32 min,  0 users,  load average: 2.98, 3.03, 3.04", "RTSP-Server":"running", "IR-Cut":"off", "Wifi":{"SSID":"xxx", "Bitrate":"72.2 Mb/s", "SignalLevel":"75%", "Linkquality":"100%", "NoiseLevel":"0%"}, "LEDs":{"Blue":"on", "Yellow":"off", "Infrared":"off"}}
     2018-03-04 08:45:02   transmission-state incoming publish received
     2018-03-04 08:45:03   upTime           08:45:23 up 1 day, 32 min,  0 users,  load average: 2.98, 3.03, 3.04
   message_ids:
   sets:
   subscribe:
     topic/dafang/status
     1
   subscribeExpr:
     ^topic\/dafang\/status$
     ^1$
   subscribeReadings:
     topic/dafang/status:
       cmd       
       name       Status
Attributes:
   IODev      mqtt
   autoSubscribeReadings 1
   group      MQTT
   room       ,20_MQTT
   stateFormat transmission-state
   subscribeReading_Status topic/dafang/status
   userReadings upTime { findValueInReading ("cam_dafang_status", "Status", "Uptime")},
RTSP-Server { findValueInReading ("cam_dafang_status", "Status", "RTSP-Server")},
IR-Cut { findValueInReading ("cam_dafang_status", "Status", "IR-Cut")},
SSID { findValueInReading ("cam_dafang_status", "Status", "SSID")},
Bitrate { findValueInReading ("cam_dafang_status", "Status", "Bitrate")},
SignalLevel { findValueInReading ("cam_dafang_status", "Status", "SignalLevel")},
Linkquality { findValueInReading ("cam_dafang_status", "Status", "Linkquality")},
NoiseLevel { findValueInReading ("cam_dafang_status", "Status", "NoiseLevel")},
LED_Blue { findValueInReading ("cam_dafang_status", "Status", "Blue")},
LED_Yellow { findValueInReading ("cam_dafang_status", "Status", "Yellow")},
LED_IR { findValueInReading ("cam_dafang_status", "Status", "Infrared")}


Cheers,
Florian
Raspberry Pi 3: CUL V3 (433 MHz a-culfw 1.21.00), Intertechno V1/V2; Z-Wave: ZME_UZB1, Fibaro Switches, Devolo Sensors, Aeotec Sensor; Xiaomi Mi; Lightify; MAXLAN: Heizkörper, Wandthermostat; Sonstiges: Fritzbox, Unfi, LG-TV, DENON AVR; TabletUI

shinebar

Hab' heute noch mal für die Steuerung der LEDs direkte Antworten auf die Requests eingebastelt.
https://github.com/EliasKotlyar/Xiaomi-Dafang-Hacks/commit/a3e712c7252eb0fca53e3a8e9c437d29996425cd
Wenn Du noch mehr brauchst, sag' nur Bescheid :)

blueberry63

Hallo Florian,

könntest Du mal den Eintrag für die Dafang in der fhem.cfg posten? Irgendwie funktioniert es bei mir nicht. Allerdings hatte ich vorher auch noch nie mit MQTT gearbeitet. Wahrscheinlich stehe ich nur noch auf einem kurzen Schlauch-Stück  ::)

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

loungelizard

Hi,

anbei mein Setting meiner Dafang Kamera als IPCAM:


Internals:
   AUTHORITY  10.x.x.x
   DEF        10.x.x.x
   NAME       cam_dafang_1
   NR         1552
   SEQ        0
   STATE      last: 2018-03-28 00:37:10
   TYPE       IPCAM
   READINGS:
     2018-03-28 00:37:11   last            cam_dafang_1_snapshot.jpg
     2018-03-28 00:36:40   snapshot1       cam_dafang_1_snapshot_1.jpg
     2018-03-28 00:36:45   snapshot2       cam_dafang_1_snapshot_2.jpg
     2018-03-28 00:36:51   snapshot3       cam_dafang_1_snapshot_3.jpg
     2018-03-28 00:37:00   snapshot4       cam_dafang_1_snapshot_4.jpg
     2018-03-28 00:37:10   snapshot5       cam_dafang_1_snapshot_5.jpg
     2018-03-28 00:37:11   snapshots       5
Attributes:
   alias      Kamera Dafang 1
   cmdPanLeft cmd=motor_left
   cmdPanRight cmd=motor_right
   cmdTiltDown cmd=motor_down
   cmdTiltUp  cmd=motor_up
   delay      10
   event-on-update-reading snapshots
   icon       it_camera
   path       cgi-bin/currentpic.cgi
   pathPanTilt cgi-bin/action.cgi?
   room       30_Cameras
   snapshots  5
   storage    /opt/fhem/www/ipcamera/dafang_1/shot
   verbose    5


Raspberry Pi 3: CUL V3 (433 MHz a-culfw 1.21.00), Intertechno V1/V2; Z-Wave: ZME_UZB1, Fibaro Switches, Devolo Sensors, Aeotec Sensor; Xiaomi Mi; Lightify; MAXLAN: Heizkörper, Wandthermostat; Sonstiges: Fritzbox, Unfi, LG-TV, DENON AVR; TabletUI

blueberry63

Hallo Florian,

ich konnte beide Geräte anlegen. Danke für die Tips.

Besteht eigentlich die Möglichkeit, eine Rückmeldung über MOTION von der Kamera zu bekommen? Das könnte ich gerade gut gebrauchen.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

loungelizard

Ich habe noch keine Möglichkeit gefunden, Bewegungs-trigger zu erkennen. Ich bin auch allgemein noch nicht 100% glücklich mit der Einbindung der Kamera. Den RTSP-Stream kann ich ja auf meinen Android-Tablets nicht anzeigen, und habe im Tablet-UI jetzt einen 5-Sekunden-Refresh auf das Standbild... Ich war jetzt schon drauf und dran, den Stream automatisch zu konvertieren, aber langsam aber sicher mute ich meinem Raspi ein bisschen viel Zusatzaufgaben zu. Ich habe testweise Zoneminder ans Laufen gebracht, aber auch da war der Stream von der Geschwindigkeit nicht akzetabel. Welche Lösungsmöglichkeiten hast Du denn schon probiert?

Raspberry Pi 3: CUL V3 (433 MHz a-culfw 1.21.00), Intertechno V1/V2; Z-Wave: ZME_UZB1, Fibaro Switches, Devolo Sensors, Aeotec Sensor; Xiaomi Mi; Lightify; MAXLAN: Heizkörper, Wandthermostat; Sonstiges: Fritzbox, Unfi, LG-TV, DENON AVR; TabletUI

blueberry63

Mein erster Test: Getriggert über einen Türsensor bekomme ich ein Bild per Telegram geschickt.

Aber es wäre nicht schlecht, wenn man eine Bewegung direkt an der Kamera abgreifen könnte.

Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

patrikg

Wie schaut den eure motion.conf aus? Habe ne Dafang mit aktueller Mod Firmware und der Prozess terminiert sofort nach dem Start.
In meiner Konfiguration habe ich nichts geändert nur umbenannt.

Grüße Patrik
FHEM on Raspberry 3, Raspbian, HMLAN, HM-CC-RT-DN, Philips HUE, Energenie SISPMS USB, Homebridge, Xiaomi Flower Mate, Osram Lightify

stenumer

Zitat von: blueberry63 am 31 März 2018, 10:49:25
Mein erster Test: Getriggert über einen Türsensor bekomme ich ein Bild per Telegram geschickt.
Moin,
an deiner Lösung wäre ich seeehr interessiert!
Was ich bislang hinbekommen habe:
- alternative Firmware für die Xiaomi Dafang
- Zugriff auf den Stream via VLC
- Bilderstellung via Zeitintervall (durch internes Menue) auf SD-Karte
Wie bekommst du das (ein) Einzelbild ausgelöst?
Wie bekommst du das Bild aus dem Gerät in FHEM?
Gruß Ulf
FHem 5.8 auf NUC
HM: 1xLAN-CFG; 1xLC-SW1-PL2; 1xSEC-SC-2
LaCrosse: myJeeLink cul_868; 6xTX29DHT-IT; 4xTX29-IT; 2xTX29_Umbau
PCA301: myJeeLink cul_868; 5xSteckdose
ESP8266 (Tasmota&ESPEasy FW): 8xSonoff; 2xWeMos

blueberry63

#9
Dann lege ich mal los  :)

Ach ja: ich habe die Kamera als IPCAM-Gerät angelegt, nicht als MQTT-Gerät

Die Kamera:

define WebcamDF2 IPCAM xxx.xxx.xxx.xxx
attr WebcamDF2 basicauth {USERNAME}:{PASSWORD}
attr WebcamDF2 cmdPanLeft cmd=motor_left
attr WebcamDF2 cmdPanRight cmd=motor_right
attr WebcamDF2 cmdTiltDown cmd=motor_down
attr WebcamDF2 cmdTiltUp cmd=motor_up
attr WebcamDF2 credentials /opt/fhem/cred_webcams.conf
attr WebcamDF2 delay 0
attr WebcamDF2 event-on-update-reading snapshots
attr WebcamDF2 icon it_camera
attr WebcamDF2 path cgi-bin/currentpic.cgi
attr WebcamDF2 pathPanTilt cgi-bin/action.cgi?
attr WebcamDF2 room Aussen
attr WebcamDF2 snapshots 5
attr WebcamDF2 storage /data/snapshots/webcamdf
attr WebcamDF2 verbose 5


Über meinen Bewegungsmelder werden 5 Bilder ausgelöst (get WebcamDF2 image):

define n_BewMelder1 notify BewMelder1:.*motionCount.* {\
  if (Value("Alarm") ne "ZUHAUSE") {\
    fhem ("get WebcamDF2 image");;\
    };;\
}


Ein 2. Notify reagiert auf die gerade erzeugten Bilder (snapshots) und schickt das letzte der 5 Bilder per Telegram:

define n_sendSnapshotDF notify WebcamDF2:.*snapshots.* {fhem ("sleep 5;; set Telegram sendPhoto /data/snapshots/webcamdf/WebcamDF2_snapshot.jpg")}


Gruß
Blueberry63
FHEM auf BBB mit Wheezy: 1x CUL_HM_HM_SCI_3_FM, 1x INSTAR CAM3010, 1x HM-LC-SW1-PL2, 1x HM-LC-Bl1PBU-FM, 1x HM-Sen-MDIR-O, Viessmann Heizung, Gaszähler via GPIO, Klingel via HM-LC-Bl1PBU-FM an FBox, Mailcheck, AVR, XBMC, NanoCUL 433+668 an Raspi per Ethernet, Funksteckdosen (Pollin, IT), Automower

stenumer

Sag schon mal Danke!
Werde ersuchen die Vorlage zu nutzen, bin gespannt!
Gruß Ulf
FHem 5.8 auf NUC
HM: 1xLAN-CFG; 1xLC-SW1-PL2; 1xSEC-SC-2
LaCrosse: myJeeLink cul_868; 6xTX29DHT-IT; 4xTX29-IT; 2xTX29_Umbau
PCA301: myJeeLink cul_868; 5xSteckdose
ESP8266 (Tasmota&ESPEasy FW): 8xSonoff; 2xWeMos

steffen83

#11
Hallo, wie ist denn bei euch der aktuelle Status?
Könnt ihr nun den Stream abgreifen und am Handy schauen? Und nicht nur über VLC sondern mit

https://play.google.com/store/apps/details?id=com.rcreations.ipcamviewer

Motion-Erkennung erkennen und an Fhem weitergeben?

Gruß
Steffen
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

loungelizard

Zitat von: stenumer am 08 Mai 2018, 09:04:31
Wie bekommst du das Bild aus dem Gerät in FHEM?

Mittlerweile hat die alternative Firmware eine Motion Detection erhalten. Die funktioniert bei mir sehr zuverlässig, d.h. ich kann meine externen Bewegungsmelder für etwas anderes verwenden.

Ich lasse mir das Event per MQTT schicken und setze dann ein DoIf auf den Event.
Das Bild schicke ich mir nach wie vor über den Mechanismus, den IPCAM liefert.

  subscribeReading_motion {mqtt_topic_name_ersetzen}/motion

das Doif dann

[cam_dafang_2_status:motion] eq "ON"
)
(
  {

fhem ("set dummy_movement_cam_dafang_2 on") ;
Log 1, "di_cam_movement_dafang_two: Motion detected ";
}
)



Cheers, Florian
Raspberry Pi 3: CUL V3 (433 MHz a-culfw 1.21.00), Intertechno V1/V2; Z-Wave: ZME_UZB1, Fibaro Switches, Devolo Sensors, Aeotec Sensor; Xiaomi Mi; Lightify; MAXLAN: Heizkörper, Wandthermostat; Sonstiges: Fritzbox, Unfi, LG-TV, DENON AVR; TabletUI

steffen83

Und ist der Stream bei euch flüssig? Bei mir laggt es ohne Ende :-(
Raspberry Pi 3 (Noobs, aktuelle Fhem und Pilight) | FHEMduino | HM-OCCU-SDK | HM-Sec-SCo | HM-Sec-SD-2 | HM-CC-RT-DN | HM-LC-Bl1PBU-FM

inesa394

Hallo

Ich habe mir auch diese Kamera jetzt zugelegt.Alternative Firmware installiert und in Fhem
als IPCAM eingerichtet.Nur leider bkomme ich beim get image nur  1kb große Dateien als svg abgespeichert
Habe ich was übersehen bei der Einrichtung kann mir jemand helfen vieleicht.

Hier mein ipcam
defmod Xiaomi_Dafang IPCAM 192.168.178.26
attr Xiaomi_Dafang DbLogExclude .*
attr Xiaomi_Dafang cmdPanLeft cmd=motor_left
attr Xiaomi_Dafang cmdPanRight cmd=motor_right
attr Xiaomi_Dafang cmdTiltDown cmd=motor_down
attr Xiaomi_Dafang cmdTiltUp cmd=motor_up
attr Xiaomi_Dafang delay 10
attr Xiaomi_Dafang event-on-update-reading snapshots
attr Xiaomi_Dafang icon it_camera
attr Xiaomi_Dafang path cgi-bin/currentpic.cgi
attr Xiaomi_Dafang pathPanTilt cgi-bin/action.cgi?
attr Xiaomi_Dafang room Status,wohnzimmer
attr Xiaomi_Dafang snapshots 5
attr Xiaomi_Dafang storage /opt/fhem/FHEM
attr Xiaomi_Dafang verbose 5

setstate Xiaomi_Dafang last: 2018-10-05 00:56:28
setstate Xiaomi_Dafang 2018-10-05 00:56:28 last Xiaomi_Dafang_snapshot.svg
setstate Xiaomi_Dafang 2018-10-05 00:55:48 snapshot1 Xiaomi_Dafang_snapshot_1.svg
setstate Xiaomi_Dafang 2018-10-05 00:55:58 snapshot2 Xiaomi_Dafang_snapshot_2.svg
setstate Xiaomi_Dafang 2018-10-05 00:56:08 snapshot3 Xiaomi_Dafang_snapshot_3.svg
setstate Xiaomi_Dafang 2018-10-05 00:56:18 snapshot4 Xiaomi_Dafang_snapshot_4.svg
setstate Xiaomi_Dafang 2018-10-05 00:56:28 snapshot5 Xiaomi_Dafang_snapshot_5.svg
setstate Xiaomi_Dafang 2018-10-05 00:56:28 snapshots 5



Danke Ines