ringdoorbell etc. - mqtt

Begonnen von brain666, 21 April 2022, 13:26:07

Vorheriges Thema - Nächstes Thema

brain666

Servus zusammen,

für alle die es evtl. Interessiert es gibt eine weitere möglichkeit die Ring Produkte in Fhem zu integrieren https://github.com/tsightler/ring-mqtt

z.b. die Ring Doorbell

Ich habe das mal ausprobiert und bekomme regelmäßig alle readings übertragen
Inc. der Funktion für einen Live Stream & Image Funktion


Internals:
   CID        Ring_Kamera1
   DEF        Ring_Kamera1
   FUUID      6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
   IODev      meinMQTT2Client
   LASTInputDev m2s
   MSGCNT     137
   NAME       Ring_Kamera1
   NR         631
   STATE      OFF
   TYPE       MQTT2_DEVICE
   m2s_CONN   m2s_127.0.0.1_52430
   m2s_MSGCNT 137
   m2s_TIME   2022-04-21 13:13:13
   .DT:
     DEVICETOPIC Ring_Kamera1
   .attraggr:
   .attrminint:
   READINGS:
     2022-04-21 10:19:00   IODev           meinMQTT2Client
     2022-04-21 13:13:13   attributes_batteryLevel 92
     2022-04-21 13:09:23   attributes_eventId 7087416364599786628
     2022-04-21 10:19:13   attributes_lastDing 0
     2022-04-21 10:19:13   attributes_lastDingTime
     2022-04-21 10:19:13   attributes_lastMotion 1650167714
     2022-04-21 10:19:13   attributes_lastMotionTime 2022-04-17T03:55:14Z
     2022-04-21 10:19:13   attributes_motionDetectionEnabled true
     2022-04-21 10:19:13   attributes_personDetected true
     2022-04-21 13:09:23   attributes_recordingUrl https://BLABLA
     2022-04-21 10:19:13   attributes_status inactive
     2022-04-21 13:13:13   attributes_wirelessNetwork EM WLAN
     2022-04-21 13:13:13   attributes_wirelessSignal -49
     2022-04-21 10:19:13   state           OFF
     2022-04-21 13:13:13   state_batteryLevel 92
     2022-04-21 13:13:13   state_firmwareStatus Up to Date
     2022-04-21 13:13:13   state_lastUpdate 2022-04-21T08:46:33Z
     2022-04-21 13:13:13   state_still_Image_URL https://localhost:8123{{ states.camera.haustür_snapshot.attributes.entity_picture }}
     2022-04-21 13:13:13   state_stream_Source rtsp://debian.zbox:8554/343ea419147b_live
     2022-04-21 13:13:13   state_wirelessNetwork EM WLAN
     2022-04-21 13:13:13   state_wirelessSignal -49
     2022-04-21 10:19:11   status          online
Attributes:
   autocreate 0
   devStateIcon {
my $WiFiQual = 'WLAN_Status.0@red';;
$WiFiQual='WLAN_Status.20@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -100));;
$WiFiQual='WLAN_Status.50@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -75));;
$WiFiQual='WLAN_Status.80@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -70));;
$WiFiQual='WLAN_Status.90@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -61));;
$WiFiQual='WLAN_Status.100@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -55));;
my $bat = 'measure_battery_100@green';;
$bat ='measure_battery_75@green' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<80);;
$bat ='measure_battery_50@green' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<60);;
$bat ='measure_battery_50@orange' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<50);;
$bat ='measure_battery_25@red' if (ReadingsVal($name, "attributes_batteryLevel", "Offline") < 25);;
"<div>" . FW_makeImage("$WiFiQual","??") . "   " . FW_makeImage("$bat","??") . " </div>" ;;
}
   readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* status
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* state
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* state
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* state
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* state
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* state
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }
   room       MQTT2_DEVICE

kjmEjfu

Zitat von: brain666 am 21 April 2022, 13:26:07
Inc. der Funktion für einen Live Stream & Image Funktion

und das funktioniert ohne jedes Abo?
Migriere derzeit zu Home Assistant

brain666

Hallo kjmEjfu

kann ich nicht sagen da ich zur Zeit ein Abo habe
müsste evtl. jemand testen der kein Abo hat.

Thyraz

Wahrscheinlich nicht:

Zitat
Even when using ring-mqtt, all streaming still goes through Ring cloud servers and is not local.
Fhem und MariaDB auf NUC6i5SYH in Proxmox Container (Ubuntu)
Zwave, Conbee II, Hue, Harmony, Solo4k, LaMetric, Echo, Sonos, Roborock S5, Nuki, Prusa Mini, Doorbird, ...

brain666


ich habe die funktion Snapshot aktiviert dort wird auch ein Bild übertragen dieses lasse ich mir per WriteFile speichern
und lasse es mir dann im devstateicon anzeigen nur leider bekomme ich es nicht hin das ich die größe des Images ändern kann im devstateicon :(

Siehe Bild Anhang so sieht es bisher aus.


define Ring_Kamera1 MQTT2_DEVICE Ring_Kamera1
setuuid Ring_Kamera1 6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
attr Ring_Kamera1 autocreate 0
attr Ring_Kamera1 devStateIcon {
my $WiFiQual = 'WLAN_Status.0@red';;
$WiFiQual='WLAN_Status.20@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -100));;
$WiFiQual='WLAN_Status.50@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -75));;
$WiFiQual='WLAN_Status.80@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -70));;
$WiFiQual='WLAN_Status.90@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -61));;
$WiFiQual='WLAN_Status.100@green' if ((ReadingsVal($name, "status", "Offline") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -55));;
my $bat = 'measure_battery_100@green';;
$bat ='measure_battery_75@green' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<80);;
$bat ='measure_battery_50@green' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<60);;
$bat ='measure_battery_50@orange' if (ReadingsVal($name, "attributes_batteryLevel", "Offline")<50);;
$bat ='measure_battery_25@red' if (ReadingsVal($name, "attributes_batteryLevel", "Offline") < 25);;
my $snapshot;;
$snapshot = "<img src='fhem/images/mqttjs_fa51d44e_map.png' style='max-width:128 max-height:128'>";;
"<div>" . FW_makeImage("$WiFiQual") . "   " . FW_makeImage("$bat") . "  " . FW_makeImage("$snapshot") . "</div>" ;;
}
attr Ring_Kamera1 readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* status\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_motion/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/select/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_select/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_ding/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_info/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_wireless/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_battery/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot/image:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);;;; {map=>"images/mqttjs_fa51d44e_map.png"} }
attr Ring_Kamera1 room MQTT2_DEVICE





brain666

den Live output habe ich auch gerade getestet und mit ffmpeg gegrabbed

testvideo im Anhang


ffmpeg -i rtsp://debian.zbox:8554/343ea419147b_live test.avi


brain666

#6
Das Device nochmals etwas überarbeitet image size funktioniert nun auch.



define Ring MQTT2_DEVICE Ring_Kamera1
setuuid Ring 6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
attr Ring autocreate 0
attr Ring devStateIcon  {
my $WiFiQual = 'WLAN_Status.0@red';;
$WiFiQual='WLAN_Status.20@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -100));;
$WiFiQual='WLAN_Status.50@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -75));;
$WiFiQual='WLAN_Status.80@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -70));;
$WiFiQual='WLAN_Status.90@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -61));;
$WiFiQual='WLAN_Status.100@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -55));;
my $bat = 'measure_battery_100@green';;
$bat ='measure_battery_75@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<80);;
$bat ='measure_battery_50@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<60);;
$bat ='measure_battery_50@orange' if (ReadingsVal($name, "attributes_batteryLevel", "0")<50);;
$bat ='measure_battery_25@red' if (ReadingsVal($name, "attributes_batteryLevel", "0")< 25);;
my $snapshot;;
$snapshot = "<img src='/fhem/images/mqttjs_fa51d44e_map.png' style='max-width:160px;;max-height:130px'>";;
"<div><td>" . FW_makeImage("$snapshot") . "</td><td> " . FW_makeImage("$WiFiQual") . " " . FW_makeImage("$bat") . "</td></div>" ;;

}
attr Ring group ringdoor
attr Ring readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* state\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* streamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* eventstreamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* eventselectstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* motionstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* dingstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_motion/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/select/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_select/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_ding/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_info/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_wireless/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_battery/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot/image:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);;;; {map=>"images/mqttjs_fa51d44e_map.png"} }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot_interval/state:.* snapshotinterval
attr Ring room MQTT2_DEVICE

brain666

jetzt habe ich ein neues Problem entdeckt :(

ich nutze auf meinen Tables das dashboard und nach ca. 1,5 Minuten verdoppelt sich der output wie man auf dem Bild sieht.
Wenn ich dann das Dashboard verlasse und wieder zurück gehe ist die Anzeige wieder normal
Ich habe die gruppe mit der ring auch mal größer gezogen ob es sich evtl als weiter replutiziert dem ist aber nicht so

hat jemand evtl. eine Idee was hier schief läuft ?


brain666

ich habe es jetzt selbst hinbekommen

statt in devstateicon habe ich es in stateFormat eingetragen jetzt scheint der Fehler nichtmehr aufzutreten.

mein Device sieht bisher so aus bisher ohne Fehler und mit Anzeige des Screenshots

Die Readings werden


define Ring MQTT2_DEVICE Ring_Kamera1
setuuid Ring 6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
attr Ring autocreate 0
attr Ring group ringdoor
attr Ring readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* status2\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* streamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* eventstreamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* eventselectstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* motionstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* dingstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_motion/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/select/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_select/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_ding/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_info/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_wireless/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_battery/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot/image:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);;;; {map=>"images/mqttjs_fa51d44e_map.png"} }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot_interval/state:.* snapshotinterval\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/command:.* volumecommand\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/state:.* volumestate
attr Ring room MQTT2_DEVICE
attr Ring stateFormat | <span style='color:#008800'>[$name:status2:r1]</span>\
| Akku: [$name:attributes_batteryLevel:r1]%</span>\
| <div><img src="/fhem/www/images/mqttjs_fa51d44e_map.png" style='max-width:160px;;;;max-height:130px'></span>


was ich bisher aber nicht hinbekommen habe ist die Anzeige der Batterie und der Wlans per Icons Anzeigen zu lassen


my $WiFiQual = 'WLAN_Status.0@red';;
$WiFiQual='WLAN_Status.20@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -100));;
$WiFiQual='WLAN_Status.50@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -75));;
$WiFiQual='WLAN_Status.80@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -70));;
$WiFiQual='WLAN_Status.90@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -61));;
$WiFiQual='WLAN_Status.100@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -55));;
my $bat = 'measure_battery_100@green';;
$bat ='measure_battery_75@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<80);;
$bat ='measure_battery_50@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<60);;
$bat ='measure_battery_50@orange' if (ReadingsVal($name, "attributes_batteryLevel", "0")<50);;
$bat ='measure_battery_25@red' if (ReadingsVal($name, "attributes_batteryLevel", "0")< 25);;


sowie ich das mit einbaue z.b. so


{
my $WiFiQual = 'WLAN_Status.0@red';;
$WiFiQual='WLAN_Status.20@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -100));;
$WiFiQual='WLAN_Status.50@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -75));;
$WiFiQual='WLAN_Status.80@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -70));;
$WiFiQual='WLAN_Status.90@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -61));;
$WiFiQual='WLAN_Status.100@green' if ((ReadingsVal($name, "status", "Online") ne "Offline") and (ReadingsVal($name, "state_wirelessSignal", "error") > -55));;
my $bat = 'measure_battery_100@green';;
$bat ='measure_battery_75@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<80);;
$bat ='measure_battery_50@green' if (ReadingsVal($name, "attributes_batteryLevel", "0")<60);;
$bat ='measure_battery_50@orange' if (ReadingsVal($name, "attributes_batteryLevel", "0")<50);;
$bat ='measure_battery_25@red' if (ReadingsVal($name, "attributes_batteryLevel", "0")< 25);;
"<div><td><img src='/fhem/www/images/mqttjs_fa51d44e_map.png' style='max-width:160px;;max-height:130px'></td><td> " . FW_makeImage("$WiFiQual") . " " . FW_makeImage("$bat") . "</td></div>" ;;
}
[code]

verdoppelt sich wieder die Anzeige

wenn ich es aber so lasse dann scheint die Anzeige sich nicht zu verdoppeln
[code]
attr Ring stateFormat | <span style='color:#008800'>[$name:status2:r1]</span>\
| Akku: [$name:attributes_batteryLevel:r1]%</span>\
| <div><img src="/fhem/www/images/mqttjs_fa51d44e_map.png" style='max-width:160px;;;;max-height:130px'></span>


brain666

wenn das Ring mqtt hier jemanden Interessiert ich habe mich umentschieden und bin richtung des Live streams gegangen.
mit hilfe von 2 scripten die bei bedarf dann über ffmpeg den live stream als "jpg" zurverfügungstellen.

ich habe mir in fhem ein PIR angelegt

der gemountete punkt --> /opt/fhem/www/snapshots/
ist natürlich im Arbeitsspeicher um die ssd zu schonen


define PIRweb4 HTTPSRV PIR4 /opt/fhem/www/snapshots/ring Ring
setuuid PIRweb4 6269017b-f33f-078c-b7c6-1184abb2c3a1105d


sowie eine index.html zum autorefresh des bildes


<html>
<head>
<title>Ring_Motion_live</title>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">

<style type='text/css'>
div{
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
<script language="javascript">
<!--
var img = new Image();
var imgObj;

function preload()
{
        img.src='/fhem/www/snapshots/ring/test.jpg?'+new Date;
}

function changesrc()
{
        img1.src=img.src;
        preload();
        setTimeout(changesrc,3500);
}

function update()
{
        imgObj = document.getElementById('img1');

        imgObj.src = img.src;
        img.src = "/fhem/www/snapshots/ring/test.jpg?" + (new Date()).getTime();
}

function takeError()
{
        img.src = "/fhem/www/snapshots/ring/test.jpg.jpg?" + (new Date()).getTime();
}

function startonload()
{
        img.src = "/fhem/www/snapshots/ring/test.jpg?" + (new Date()).getTime();
        img.onerror=takeError;
        img.onload=update;
}

function load()
{
        if (navigator.appName.indexOf("Microsoft IE Mobile") != -1)
        {
                preload();
                changesrc();
                return;
        }
        startonload();
}
//-->
</script>
</head>
<body onLoad="load()">
<p><img width="150" height="100" id="img1" border="0" src="/fhem/www/snapshots/ring/test.jpg"></p>
</body>
</html>



und ein doif für die bewegungserkennung


define ring_bewegung DOIF ([Ring:motionstate] eq "ON") { system("sudo /opt/fhem/ringstart.sh &") }\
setuuid ring_bewegung 62690afa-f33f-078c-a9b1-8e28bb298a4db8dc


bei bewegung wird für 120 Sekungen ein Livestream über ffmpeg gestartet

ring.sh

ffmpeg -y -i "rtsp://debian.zbox:8554/343ea419147b_live" -update 1 -r 0.5 -vf scale=155:120 /opt/fhem/www/snapshots/ring/test.jpg


ringstart.sh

screen -A -m -d -S fhem /opt/fhem/ring.sh
sleep 120
kill -Hup $(ps ux | grep /opt/fhem/ring.sh | awk 'NR == 1 {next} {print $2}' | uniq | sort)



mein Ring device habe ich entsprechen angepasst mit iframe


define Ring MQTT2_DEVICE Ring_Kamera1
setuuid Ring 6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
attr Ring autocreate 0
attr Ring group ringdoor
attr Ring readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* status2\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* streamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* eventstreamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* eventselectstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* motionstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* dingstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_motion/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/select/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_select/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_ding/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_info/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_wireless/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_battery/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot/image:.* { WriteFile("www/images/mqttjs_fa51d44e_map.png",$EVENT);;;; {map=>"images/mqttjs_fa51d44e_map.png"} }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot_interval/state:.* snapshotinterval\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/command:.* volumecommand\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/state:.* volumestate
attr Ring room MQTT2_DEVICE
attr Ring stateFormat | <span style='color:#008800'>[$name:status2:r1]</span>\
| Akku: [$name:attributes_batteryLevel:r1]%</span>\
<iframe src="/fhem/PIR4/index.html" width="155px" height="115px" name="iFrame" frameBorder="0" scrolling="no"></iframe>\
<html>last_motion: <span style='color:#008800'><a href="[$name:attributes_recordingUrl]">[$name:attributes_lastMotionTime]</a></span></html>\


stand bisher siehe angehängtes bild

last_motion --> ist klickbar zur letzten Aufzeichung.

brain666

Device erweitert --> live
für eine livestream übertragung von 120 sekunden


define Ring MQTT2_DEVICE Ring_Kamera1
setuuid Ring 6260ff4f-f33f-078c-50fd-aeadfcc278bd466a
attr Ring autocreate 0
attr Ring group ringdoor
attr Ring readingList mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/status:.* status2\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/wireless/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/battery/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/state:.* streamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/state:.* eventstreamstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_stream/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/state:.* eventselectstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/event_select/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/motion/state:.* motionstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/state:.* dingstate\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/ding/attributes:.* { json2nameValue($EVENT, 'attributes_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/info/state:.* { json2nameValue($EVENT, 'state_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_motion/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/switch/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_stream/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/select/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_event_select/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/binary_sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_ding/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_info/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_wireless/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
FHEM:homeassistant/sensor/4db094de-a292-415d-a224-7a910a30faf5/343ea419147b_battery/config:.* { json2nameValue($EVENT, 'config_', $JSONMAP) }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot/image:.* { WriteFile("www/snapshots/ring/test.jpg",$EVENT);;;; {map=>"images/test.jpg"} }\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/snapshot_interval/state:.* snapshotinterval\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/command:.* volumecommand\
mqttjs_.*:ring/4db094de-a292-415d-a224-7a910a30faf5/camera/343ea419147b/volume/state:.* volumestate
attr Ring room MQTT2_DEVICE
attr Ring setList live { system("sudo /opt/fhem/ringstart.sh &") }
attr Ring stateFormat <div align='center'><span style='color:#008800'>[$name:status2:r1]</span>\
| Akku: [$name:attributes_batteryLevel:r1]%</span></div>\
<iframe src="/fhem/PIR4/index2.html" width="195px" height="115px" name="iFrame" frameBorder="0" scrolling="no"></iframe>\
<html>last_motion: <span style='color:#008800'><a href="[$name:attributes_recordingUrl]" target="_blank">[$name:attributes_lastMotionTime]</a></span></html>\
attr Ring webCmd live

pflock_y

hallo,

klingt sehr interressant!!!!
Wie hast du die Ring MQTT anbindung realisiert?
Docker oder Manuel?


vg
pflock_y

brain666

Servus  pflock_y

ich habe es manuel gemacht ich stehe nicht so auf docker
läuft auch 100% stabil jetzt seit 2 Wochen
Ich habe auch noch eine "normale" Ring stick up Cam eingebunden nach dem selben prinzip
auch dies läuft perfekt.


pflock_y

Moin,
Ich hatte mich erst einmal mit der docker Methode beschäftigt, will aber leider nicht so richtig.
Ich werde mir mal die manuelle Sachen anschauen. Mal sehen wie weit ich da komme.

vg
pflock_y

Damian

#14
Hat es jemand schon auf einem raspberry mit buster-OS installiert?

Bei mir kommen beim Start folgende Meldungen:

fhem@raspberrypi:~/ring-mqtt$ node ./init-ring-mqtt.js
internal/modules/cjs/loader.js:638
    throw err;
    ^

Error: Cannot find module 'write-file-atomic'
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
    at Function.Module._load (internal/modules/cjs/loader.js:562:25)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/opt/fhem/ring-mqtt/init-ring-mqtt.js:3:25)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)


Edit: Es fehlte noch der npm-Aufruf.

Nun kommt:

fhem@raspberrypi:~/ring-mqtt$ node ./init-ring-mqtt.js
/opt/fhem/ring-mqtt/node_modules/ring-client-api/lib/api/rest-client.js:72
            device_model: this.authOptions.controlCenterDisplayName ?? 'ring-client-api',
                                                                     ^

SyntaxError: Unexpected token ?
    at Module._compile (internal/modules/cjs/loader.js:723:23)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
    at Module.require (internal/modules/cjs/loader.js:692:17)
    at require (internal/modules/cjs/helpers.js:25:18)
    at Object.<anonymous> (/opt/fhem/ring-mqtt/init-ring-mqtt.js:5:28)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)


Ich vermute, dass jetzt Ring-Daten für die Zweifaktor Autorisierung fehlen.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF