FHEM Forum

FHEM - Hausautomations-Systeme => MAX => Thema gestartet von: doman75 am 22 Februar 2019, 11:05:23

Titel: Reboot MAxCube
Beitrag von: doman75 am 22 Februar 2019, 11:05:23
Hallo,

bei openhab ist es ja möglich den Cube zu rebooten von der ferne (also mit orginal Firmware drauf) ist das bei FHEM auch irgendwie möglich?

Grüße
Swen
Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 27 April 2022, 14:50:49
ich habe mal rumexperimentiert es muss ja eigentlich gehen das man den Cube rebooten kann.

leider komme ich aber auch nicht weiter :(


root@debian:~# curl -d '{"action-cubeReboot":1234}' -H "Content-Type: application/json"  http://192.168.188.70:62910/rest/things/max:bridge:OEQ1944526/config --http0.9 -verbose
*   Trying 192.168.188.70:62910...
* Connected to 192.168.188.70 (192.168.188.70) port 62910 (#0)
> POST /rest/things/max:bridge:OEQ1944526/config HTTP/1.1
> Host: 192.168.188.70:62910
> User-Agent: curl/7.82.0
> Accept: */*
> Referer: rbose
> Content-Type: application/json
> Content-Length: 26
>
H:OEQ1944526,1b521a,0113,00000000,2fd57510,01,32,16041b,0e2d,03,0000
M:
C:1b521a,7RtSGgATAf9PRVExOTQ0NTI2AAsABEAAAAAAAAAAAP///////////////////////////wsABEAAAAAAAAAAQf///////////////////////////2h0dHA6Ly9tYXgtcG9ydGFsLmVxLTMuZGU6ODAvbG9va3VwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENFVAAACgADAAAOEENFU1QAAwACAAAcIA==
C:1be39f,0hvjnwEAEaFQRVExMDEyNjg4IyI9CQcYAzAM/wBEVEzwRSBFIEUgRSBFIEUgRSBFIEUgRSBFIERUTPBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgREhEukzwRSBFIEUgRSBFIEUgRSBFIEUgRSBESES6TPBFIEUgRSBFIEUgRSBFIEUgRSBFIERIRLpM8EUgRSBFIEUgRSBFIEUgRSBFIEUgREhEukzwRSBFIEUgRSBFIEUgRSBFIEUgRSBESES6TPBFIEUgRSBFIEUgRSBFIEUgRSBFIA==
C:023b25,EQI7JQQAEw9KRVcwMDAwNDE1
C:1bd741,0hvXQQEAEaFQRVExMDA5ODg4KiI9CQcYA/AM/wBaSFpsWsxVFF0gRSBFIEUgRSBFIEUgRSBFIFpIWmxazFUUXSBFIEUgRSBFIEUgRSBFIEUgWkhabFrMVRRdIEUgRSBFIEUgRSBFIEUgRSBaSFpsWsxVFF0gRSBFIEUgRSBFIEUgRSBFIFpIWmxazFUUXSBFIEUgRSBFIEUgRSBFIEUgWkhabFrMVRRdIEUgRSBFIEUgRSBFIEUgRSBaSFpsWsxVFF0gRSBFIEUgRSBFIEUgRSBFIA==
C:1ada8b,zhraiwMAEP9PRVEyMTAwNjgwKiI9CURIUPBFIEUgRSBFIEUgRSBFIEUgRSBFIEUgREhQ8EUgRSBFIEUgRSBFIEUgRSBFIEUgRSBQSESoUPBFIEUgRSBFIEUgRSBFIEUgRSBFIFBIRKhQ8EUgRSBFIEUgRSBFIEUgRSBFIEUgUEhEqFDwRSBFIEUgRSBFIEUgRSBFIEUgRSBQSESoUPBFIEUgRSBFIEUgRSBFIEUgRSBFIFBIRKhQ8EUgRSBFIEUgRSBFIEUgRSBFIEUgBxgw
C:03386a,0gM4agEAFP9JRU4wMDQ1OTEzIiI9CQcYAzAM/wBESFUIRSBFIEUgRSBFIEUgRSBFIEUgRSBFIERIVQhFIEUgRSBFIEUgRSBFIEUgRSBFIEUgREhUbETMVRRFIEUgRSBFIEUgRSBFIEUgRSBESFRsRMxVFEUgRSBFIEUgRSBFIEUgRSBFIERIVGxEzFUURSBFIEUgRSBFIEUgRSBFIEUgREhUbETMVRRFIEUgRSBFIEUgRSBFIEUgRSBESFRsRMxVFEUgRSBFIEUgRSBFIEUgRSBFIA==
L:CxvjnwkSGQALAAAABgI7JQkSEAsb10EDEhkACgCeAAwa2osJEhkBCwAAAK0LAzhqCRIZAAsAAAA=

Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 28 April 2022, 08:36:46
es sieht so aus als würde man den Cube über udp port 23272 zum reboot bekommen

quelle https://github.com/Bouni/max-cube-protocol/blob/master/Cube_Discovery.md (https://github.com/Bouni/max-cube-protocol/blob/master/Cube_Discovery.md)


"eQ3Max*\0" + serialnumber + "R"
Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 28 April 2022, 09:17:51
müsste ich nicht eine msg zurück bekommen vom cube wenn ich ein udp paket sende?



echo -e '\x65 \x51 \x33 \x4D \x61 \x78 \x2A \x00 \x2A \x2A \x2A \x2A \x2A \x2A \x2A \x2A \x2A \x2A \x49' > /dev/udp/192.168.188.36/23272


eigentlich müsste doch so der reboot ausgelöst werden

Serial vom Cube ist IEW0006612


echo -e '\x65 \x51 \x33 \x4D \x61 \x78 \x49 \x45 \x57 \x30 \x30 \x30 \x36 \x36 \x31 \x32 \x52' > /dev/udp/192.168.188.36/23272


Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 03 Mai 2022, 12:18:32
neuer Versuch scheiterte auch :(


echo -en "\x65\x51\x33\x4D\x61\x78\x49\x45\x57\x30\x30\x30\x36\x36\x31\x32\x52" | nc -w1 -u -b 192.168.188.255 23272
echo -e "\x65\x51\x33\x4D\x61\x78\x49\x45\x57\x30\x30\x30\x36\x36\x31\x32\x52" | nc -w1 -u -b 192.168.188.255 23272


scheinbar liegt es an der art wie ich übermittle


17190 19405 6.256499676 192.168.188.21 → 192.168.188.36 A21 59 Unknown[Malformed Packet]
36614 37319 11.322551329 PCPartne_83:60:de → eQ-3Entw_01:ce:e8 ARP 42 Who has 192.168.188.36? Tell 192.168.188.21
37333 11.323580408 eQ-3Entw_01:ce:e8 → PCPartne_83:60:de ARP 60 192.168.188.36 is at 00:1a:22:01:ce:e8
42105 42770 13.099536058 192.168.188.21 → 192.168.188.36 A21 80 Unknown[Malformed Packet]
50460 51772 16.588121467 192.168.188.21 → 192.168.188.36 A21 80 Unknown[Malformed Packet]
63007 63062 21.882766600 192.168.188.21 → 192.168.188.36 A21 80 Unknown[Malformed Packet]
105955 106250 51.755861536 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
106465 107172 52.738039620 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
107173 52.738132074 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
116344 116502 59.867411539 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
116956 60.315246080 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
116957 60.315327905 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
121484 121644 63.851739049 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
122254 122977 64.842116144 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
122978 64.842163218 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
123377 123407 65.078590551 PCPartne_83:60:de → eQ-3Entw_01:ce:e8 ARP 42 Who has 192.168.188.36? Tell 192.168.188.21
123408 65.078978056 eQ-3Entw_01:ce:e8 → PCPartne_83:60:de ARP 60 192.168.188.36 is at 00:1a:22:01:ce:e8
130196 130667 70.796529036 eQ-3Entw_01:ce:e8 → Broadcast    ARP 60 Who has 192.168.188.9? Tell 192.168.188.36
135089 135122 74.140690610 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
136431 136411 75.125280098 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
136412 75.125390248 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
142203 142823 79.883046126 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
143729 143922 80.866344196 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
143923 80.866418508 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
150958 151097 86.410653267 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
151848 151941 86.856079877 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
151942 86.856183346 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
158788 159225 93.022746273 192.168.188.21 → 192.168.188.36 A21 61 Unknown[Malformed Packet]
159490 159670 93.475189360 192.168.188.36 → 192.168.188.21 A21 68 Unknown[Malformed Packet]
159671 93.475265796 192.168.188.21 → 192.168.188.36 ICMP 96 Destination unreachable (Port unreachable)
168365 169017 102.226781017 192.168.188.21 → 192.168.188.36 A21 59 Unknown[Malformed Packet]


Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 04 Mai 2022, 14:32:45
next test

Python --> message base64 encoded

leider auch negativ :(


import socket

UDP_IP = "192.168.188.36"
UDP_PORT = 23272
MESSAGE = "ZVEzTWF4SUVXMDAwNjYxMlIK"

print("UDP target IP: %s" % UDP_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE)

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE.encode(), (UDP_IP, UDP_PORT))

Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 05 Mai 2022, 10:38:30
Servus zusammen,

weiß jemand wieso ich bei convert nach hex eine 2e rausbekomme

laut https://github.com/Bouni/max-cube-protocol/blob/master/Cube_Discovery.md (https://github.com/Bouni/max-cube-protocol/blob/master/Cube_Discovery.md) sollte dort eigentlich eine 00 sein

root@debian:~/test# echo eQ3Max*.**********I | hd
00000000  65 51 33 4d 61 78 2a 2e  2a 2a 2a 2a 2a 2a 2a 2a  |eQ3Max*.********|
00000010  2a 2a 49 0a                                       |**I.|
00000014


Hence to find a specific cube send a discovery packet with the content: "eQ3Max*\0" + serialnumber + "I"


root@debian:~/test# echo "eQ3Max*\0"IEW0006612"I" | hd
00000000  65 51 33 4d 61 78 2a 5c  30 49 45 57 30 30 30 36  |eQ3Max*\0IEW0006|
00000010  36 31 32 49 0a                                    |612I.|
00000015

Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 05 Mai 2022, 11:51:02
es hat geklappt ich konnte den Cube bzw. die Cubes jetzt zum reboot bewegen



in Python


import socket
import codecs

UDP_PORT = 23272

CUBE1_IP = "192.168.188.36"
CUBE2_IP = "192.168.188.70"

CUBE_SN1 = "IEW0006612"
CUBE_SN2 = "OEQ1944526"
CUBE_INIT = '\x65\x51\x33\x4D\x61\x78\x2A\x00'
CUBE_REBOOT = '\x52'

MESSAGE = '\x65\x51\x33\x4D\x61\x78\x2A\x00\x49\x45\x57\x30\x30\x30\x36\x36\x31\x32\x52'
MESSAGE2 = '\x65\x51\x33\x4D\x61\x78\x2A\x00\x4F\x45\x51\x31\x39\x34\x34\x35\x32\x36\x52'

message_bytes = MESSAGE.encode('ascii')
message2_bytes = MESSAGE2.encode('ascii')

print("Cube 1:")
print("UDP target IP: %s" % CUBE1_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE)

print("Cube 2:")
print("UDP target IP: %s" % CUBE2_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE2)

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE.encode(), (CUBE1_IP, UDP_PORT))

sock.sendto(MESSAGE2.encode(), (CUBE2_IP, UDP_PORT))


in fhem habe ich es mir so eingebunden


define Cube_reboot DOIF ([Cube_neustarten:state] eq "reboot") { system("python3 /opt/fhem/cube_reboot &") }
setuuid Cube_reboot 6273a075-f33f-078c-02c4-b0908db49464755a
attr Cube_reboot do always
define Cube_neustarten dummy
setuuid Cube_neustarten 6273a083-f33f-078c-de14-322231ac64fc75f3
attr Cube_neustarten setList reboot
attr Cube_neustarten webCmd reboot
Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 09 Mai 2022, 11:16:26
Shell Script für den Reboot
es muss nur die IP & die SN eingetragen werden


#!/bin/bash
tmp="/tmp/cube"
UDP_PORT="23272"
CUBE1_IP="192.168.188.36"
CUBE_SN1="IEW0006612"

CUBE_INIT='\x65\x51\x33\x4D\x61\x78\x2A\x00'
CUBE_REBOOT='\x52'

if [ -f "$tmp" ]; then
rm $tmp
fi
echo "Convert Serial nach hex"
echo -n $CUBE_SN1 | xxd -ps | sed -e ':a' -e 's/\([0-9]\{2\}\|^\)\([0-9]\{2\}\)/\1\\x\2/;ta' >> $tmp
file="$tmp"
lines=`cat $file`
for line in $lines; do
        echo "$line"
done
echo "Max-Cube Reboot"
echo "IP: $CUBE1_IP"
echo "Seriennummer: $CUBE_SN1"
echo -en $CUBE_INIT$lines$CUBE_REBOOT  | nc -w1 -u -b 192.168.188.36 23272
echo "Reboot dauert ca. 2 Minuten"
rm $tmp

Titel: Antw:Reboot MAxCube
Beitrag von: Wzut am 14 Mai 2022, 18:57:33
python , shell .... warum denn nicht gleich Perl ?
Hier meine beiden Vorschläge für die 99_myUtils mit ordenlichen Fehlermeldungen im Logfile
sub cube_reboot
{
    use IO::Socket;

    my $host   = shift // return;
    my $serial = shift // return;

    my $sock = IO::Socket::INET->new(
PeerPort => 23272,
PeerHost => $host,
Type => SOCK_DGRAM,
Proto => 'udp',
Blocking => 0,
Timeout => 5);

    if (!$sock) {
Log3 ('cube_reboot', 2, "Cannot create socket - $@");
return;
    }

    my $message = 'eQ3Max*'.0x00.$serial.'R';
    my $s = $sock->send($message, 0, $host);
    Log3 ('cube_reboot', 2, "Cannot send message $message to cube $host") if (!defined($s));

    $sock->close();
    return;
}


Aufruf z.B. (bei mir)
{cube_reboot('192.168.0.228', 'MKF0071736')}

oder man holt sich die IP und SerienNr direkt aus dem Device :

sub cube_reboot
{
    use IO::Socket;

    my $name = shift // return;

    my ($host,undef) = split(':',InternalVal($name ,'DeviceName', ': '));
    my $serial = InternalVal($name, 'serial', '');

    if (!$serial || !$host) {
Log3 ('cube_reboot', 2, "Cannot get cube IP") if (!$host);
Log3 ('cube_reboot', 2, "Cannot get cube serial") if (!$serial);
return;
    }

    my $sock = IO::Socket::INET->new(
PeerPort => 23272,
PeerHost => $host,
Type => SOCK_DGRAM,
Proto => 'udp',
Blocking => 0,
Timeout => 5);

    if (!$sock) {
Log3 ('cube_reboot', 2, "Cannot create socket - $@");
return;
    }

    my $message = 'eQ3Max*'.0x00.$serial.'R';
    my $s = $sock->send($message, 0, $host);
    Log3 ('cube_reboot', 2, "Cannot send message $message to cube $host") if (!defined($s));

    $sock->close();
    return;
}


der Aufruf ist dann auch etwas kürzer, da nur noch der Name übergeben werden muß
{cube_reboot('meinCube')}
Titel: Antw:Reboot MAxCube
Beitrag von: brain666 am 17 Mai 2022, 09:31:16
Servus Wzut

in Perl habe ich es nicht hinbekommen :(

leider klappen deine beiden Beispiele auch nicht.


2022.05.17 09:24:28 2: Cannot send message eQ3Max*0OEQ1944526R to cube 192.168.188.70
2022.05.17 09:24:34 2: Cannot get cube serial
2022.05.17 09:26:24 2: Cannot send message eQ3Max*0OEQ1944526R to cube 192.168.188.70
2022.05.17 09:27:57 2: Cannot send message eQ3Max*0OEQ1944526R to cube 192.168.188.70
2022.05.17 09:28:08 2: Cannot send message eQ3Max*0OEQ1944526R to cube 192.168.188.70