-
Autor
Hallo zusammen,
ich bin gerade dabei, die Daten meiner Shellys mitzuloggen und in eine InfluxDB zu schreiben. Da ich die Shellys nicht auf MQTT umstellen will (Cloud), will ich die Multicast-Messages auswerten. Mein erster Aufschlag ist das Script hier:
PHP
<?php
$port = 5683;
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
echo "Read Shellys -> socket creation done: ".$socket."\n";
$bindip="0.0.0.0";
if(!socket_bind($socket,$bindip,$port)) {echo "Read SMA Energymeter -> bind failed\n"; exit(); }
echo "Read Shellys -> bind on port: ".$port." ip: ".$bindip." done\n";
$adress = "224.0.1.187"; // Multicast IP used by SMA
$ret=socket_set_option($socket,IPPROTO_IP,MCAST_JOIN_GROUP,array("group"=>$adress,"interface"=>0));
if ($ret === false) {echo "Read SMA Energymeter -> Unable to join multicast group";exit(); }
echo "Read Shellys -> MCAST join sucessfully done: ".$adress."\n";
$fromport= 0;
$flags = 0 ;
$from = '';
$raw = "Data goes here";
$len = 400 ;
echo "Read Shellys -> start retrieval. Len:".$len."\n";
while(1){
$bytes=socket_recvfrom($socket,$raw,$len,$flags,$from,$fromport);
print_r($raw);
echo "Read Shellys -> socket recieved done. Bytes:".$bytes."\n";
}
?>
Alles anzeigen
Das funktioniert auch grundsätzlich, ich bekomme in die $raw Werte geschrieben wie
Code
---
Read Shellys -> socket recieved done. Bytes:64
P$?cits?
?SHSW-1#B9D865#1?C???{"G":[[0,112,0],[0,118,0]]}
---
Read Shellys -> socket recieved done. Bytes:64
P???cits?
?SHSW-1#BA02D9#1?C??&?{"G":[[0,112,0],[0,118,0]]}
---
Read Shellys -> socket recieved done. Bytes:64
P=??cits?
?SHPLG-S#51C841#1?C??xm?{"G":[[0,111,1.31],[0,112,1],[0,113,35.24],[0,114,95.44],[0,115,0],[0,211,1.295],[0,212,1.290],[0,213,1.313],[0,214,76627]]}
---
Read Shellys -> socket recieved done. Bytes:162
P?гcits?
?SHSW-25#B952A6#1?C??{e?{"G":[[0,112,0],[0,122,0],[0,111,0.000000],[0,121,0.000000],[0,118,0],[0,128,0],[0,115,50.86],[0,116,123.55],[0,117,0],[0,211,0.000],[0,212,0.000],[0,213,0.000],[0,214,1],[0,221,0.000],[0,222,0.000],[0,223,0.000],[0,224,7465]]}
---
Alles anzeigen
Augenscheinlich kommt die Rückgabe anfangs mit einigen codierten(?) Infos, der Shelly-ID und dann der Payload (json) zurück.
Hat jemand von euch schonmal mit den Rückgaben gearbeitet und kann mir einen Tipp geben, wie ich an die json-Payload und die Shelly-ID komme?
Danke!
Michael