+ Antworten
Seite 1 von 39 1 2 3 11 ... LetzteLetzte
Ergebnis 1 bis 10 von 389
  1. #1
    Registriert seit
    Jan 2007
    Ort
    Etzenrot
    Beiträge
    155

    Standard Plugwise ohne Server direkt auslesen/schalten

    Hallo

    nachdem paresy (dankeschön) auf die Seite maartendamen hingewiesen hat, hab ich mal schnell versucht auf den Stick und die Circle über eine Registervariable ohne den Plugwise Server, zuzugreifen und es funktioniert.


    Die Verbindung mit dem Stick war nach dem Studium der oben genannten Seite schnell hergestellt und der Stick initialisert, nur das Auslesen wollte nicht funktionieren, da man mit anderen Adressen natürlich auch einen anderen CRC hat und den musst ich erstmal rausbekommen.
    Nach einigem Suchen im Netz hab ich dann die Lösung gefunden und will sie euch natürlich nicht vorenthalten.

    PHP-Code:
    <?

    // this function is used to calculate the (common) crc16c for an entire buffer
    function calculate_common_crc16c($buffer)
    {
        
    $crc16c 0x0000;  // the crc initial value laut www.maartendamen.com
        
    $buffer_length strlen($buffer);
        for (
    $i 0$i $buffer_length$i++)
        {
            
    $ch ord($buffer[$i]);
            
    $crc16c update_common_crc16c($ch$crc16c);
        }
        return 
    $crc16c;
    }
    // this function is used to calculate the (common) crc16c byte by byte
    // $ch is the next byte and $crc16c is the result from the last call, or 0xffff initially
    function update_common_crc16c($ch$crc16c)
    {
        
    $crc16c_polynomial 0x11021;   //auch laut maartendamen
        // This comment was in the code from
        // http://www.joegeluso.com/software/articles/ccitt.htm
        // Why are they shifting this byte left by 8 bits??
        // How do the low bits of the poly ever see it?
        
    $ch <<= 8;
        for(
    $i 0$i 8$i++)
        {
            if ((
    $crc16c $ch) & 0x8000)
            {
                
    $xor_flag true;
            }
            else
            {
                
    $xor_flag false;
            }
            
    $crc16c $crc16c << 1;
            if (
    $xor_flag)
            {
                
    $crc16c $crc16c $crc16c_polynomial;
            }
            
    $ch $ch << 1;
        }
        
    // mask off (zero out) the upper two bytes
        
    $crc16c $crc16c 0x0000ffff;
        return 
    $crc16c;
    }


    // init
    $befehl="000A";
    $mac="";

    // abfrage Verbrauch
    //$befehl = '0012';
    //$mac = '000Dxx0000D3xxxB'; //Adresse des Circle




    // abfrage device
    //$befehl = '0023';
    //$mac = '000Dxx0000D3xxxB';

    // schalten
    //$befehl = '0017';
    //$mac = '000Dxx0000D3xxxB01';   //01 bzw. 00 hinten schaltet ein bzw. aus



    $text=$befehl.$mac;
    $ausgabe=dechex(calculate_common_crc16c($text));
    $ausgabe str_pad($ausgabe,'0'STR_PAD_LEFT); //mit nullen auffüllen
    $text.= $ausgabe;


    RegVar_SendText(54511 /*[Test neu\Plugwise\Register Plugwise]*/,"\x05\x05\x03\x03".$text."\x0D\x0A");


    ?>
    Als erstes muss man den Stick initialiseren mit
    PHP-Code:
    $befehl="000A";
    $mac=""
    So sieht es in der Registervariable aus 000Ab43c und das ist die Antwort des Sticks bei mir.

    00003E1300C1CA7D
    00113E13000Dxx0000CxxxE0101610Dxx0000B1Dxxxxx1FF64 D3
    ƒ

    0011 ist die Antwort auf 000A (Die Antwort ist anscheinend immer eins größer als die Anfrage)
    3E13 ist die fortlaufende Nummer der Anfragen.
    000Dxx0000 ist die Adresse des Plugwise Netzwerk jetzt noch die Adresse(Die auf dem Aufkleber) des Circles dahinter und Ihr könnt die Circle auslesen.
    0101 die erste 01 ist noch unbekannt, die hintere 01 zeigt an ob der Circle+ online ist.
    Dahinter sind dann nochmal Netzwerk Infos.


    Als nächstes kann man mit
    PHP-Code:
    $befehl '0023';
    $mac '000Dxx0000D3xxxB'
    Infos über den Circle auslesen.
    Nähere Infos zum Protokol siehe dieses Pdf.

    Mit dem Befehl "0012" kann man den Verbrauch auslesen. Der wird als Pulse pro Sekunde, Pulse pro 8 Sekunden und gesamte Pulse ausgegeben. Die muss man dann noch irgendwie mit einer Korrektur die man einmal aus dem Circle auslesen muss (Befehl 0026) verrechnen(hab mich da noch nicht eingelesen) und schon soll man den Verbrauch haben.



    Die Circle schalten geht auch mit

    PHP-Code:
    $befehl '0017';
    $mac '000Dxx0000D3xxxB01';   //01 bzw. 00 hinten schaltet ein bzw. aus 

    Mit dem Befehl 0023 bekommt man die Uhrzeit, ob ein oder aus, ob 50Hz oder 60Hz(wers braucht), Hard und Software version des Circle raus.

    Auch Uhrzeitstellen (0016), den Speicher der Circle auslesen (0048) geht.



    Jetzt muss man "nur" noch die Antworten der Registervarible auswerten aber das sollte für das Forum doch ein klacks sein und dann braucht man den Server von Plugwise nicht mehr.

    Das wollte ich nur kurz präsentieren damit sich auch andere ans Programmieren machen können. (


    So das ganze ist nur quick&dirty erstellt um zu schauen ob es geht und jetzt könnt Ihr loslegen.

    Gruß Jannis
    Geändert von Jannis (16.02.12 um 13:34 Uhr) Grund: dechex hat führende Nullen unterschlagen

  2. #2
    Registriert seit
    Jun 2010
    Ort
    Koblenz
    Beiträge
    235

    Hallo Jannis!

    Vielen Dank für deine Mühe. Ich wollte eigentlich mal ein paar Funktionen dafür schreiben, allerdings scheitere ich schon an den Basics. Den Port kann ich öffnen, die Registervariable ist angelegt & dein Init-Script ausgeführt. Im Debug-Fenster sehe ich auch die Antwort des Circles, aber wie bekomme ich die in mein PHP-Script? $_IPS['VALUE'] im RegVarParser-Script bringt nichts verwertbares...

    Kannst du mir mal dein Beispielscript schicken, mit dem du auf deine Antworten gekommen bist?

    Danke,
    Markus
    SmartHome: IPS 5.x Stable Unlimited auf RaspberryPi 3b+ / div. HM Produkte (GW: Homematic CCU2) / GHL Profilux III / IPSView / div. Z-Wave Produkte (GW: Fibaro HC2) / NETATMO / 1-Wire
    IT-Infrastruktur: UniFi WIFI / Switches / Firewall, QNAP NAS

  3. #3
    Registriert seit
    Jan 2010
    Ort
    Stockstadt am Rhein
    Beiträge
    51

    Standard Hmmm...

    ..also ich habe es auch probiert...kann es sein, dass dies mit der aktuellen Firmware garnicht mehr funktioniert? Ich komme nämlich auch auf keine vernünftigen Werte in der RegVar...

    Grüße
    Grebi
    • IPS unlimited V.4.3 auf RaspberryPi

  4. #4
    Registriert seit
    Jan 2007
    Ort
    Etzenrot
    Beiträge
    155

    Morgen

    wenn Plugwise heute Nacht nicht gerade ein Update rausgebracht hat, warte kurz ich schau nach........ ne bin noch auf dem neuesten Stand sollte es eigentlich klappen.

    (Bevor ich mich dran mach und sowas teste, versuche ich eigentlich auf dem neuesten Stand zu sein. Alles andere wäre rausgeworfene Zeit.


    Was Du mit keine "vernünftige" Werte meinst weiß ich jetzt gerade nicht, aber klar ist das die Registervariable nicht rauswirft "Circle PC verbaucht gerade soundsoviel W und ist online". Sondern
    00003E2400C16349ƒ
    00133E24000Dxx000Dxxxxx000C005C000004EFFFFFFDD 300013D12

    Das muss man dann halt erstmal in seine Einzelteile zerlegen um an die Infos ranzukommen, aber da steht genau das gleiche drin wie oben.

    Aber jetzt gehen wir mal der Reihe nach.


    Ihr habt eine Registervariable, Serialport angelegt und verbunden mit eurem Stick.

    Dann schauen wir mal was Ihr bei der Registervariable rausbekommt. Dazu Doppelklick auf die Registervariable und dann auf Debug klicken.


    Wenn ihr jetzt den Behfel 000A und keine MAC adresse schickt sollte es so aussehen(oben Text-, unten HEXansicht erstmal nur die oberen beiden Zeilen):



    um 9:31:02 wurde 000A gesendet die 4 "Vierecke" davor sind wie man unten bei der Hex Ansicht siehte die Steuerungszeichen 05 <ENQ> Enquiry und 03 <ETX> End of Text(Jeweils 2 mal).
    Damit fängt immer eine Anfrage bzw. auch die Antwort an.
    Danach kommt der Befehl 000A und danach die CRC Cecksumme b43c.
    Am schluss noch 0D <CR> Carriage Return und 0A <LF> Line Feed.

    Als Erstes kommt immer erst die Antwort vom Stick das er den Befehl empfangen hat und weiterleitet. Danach kommt dann erst die richtige Antwort vom Circle, wenn er denn noch da/erreichbar ist.

    Die Antwort 9:31:02 Recieved Data fängt auch mit 2x<ENQ> und 2x<ENT> an.
    0000 Ist die Antwort vom Stick das er die Anfrage bekommen hat
    3E25 Ist die Anfragenummer
    00C1 Bedeutet das der Befehl erfolgreich war
    C918 Ist die Checksumme CRC
    Danach kommt ein <CR> und <LF> wieder 2x<ENQ> und 2x<ENT>
    0011 ist die Antwort auf den Befehl 000A
    3E25 Die Anfragenummer (siehe oben)
    000Dxx0000Cxxxxx Die Mac adresse des Sticks
    01 ??
    01 Circle+ ist online
    61 ??
    0Dxx0000Bxxxxx MAC Adresse des Circle+
    Axxx Soll ne kurze Netzwerk ID sein
    FF
    C3FA CRC Checksumme

    Jetzt ist der Stick Initialisert(irgendwo im Netz stand zwar das man das nicht unbedingt braucht aber schaden tuts sicher nicht).

    Mit dem Befehl 0012 und der Mac Adresse eines Circle, siehe
    9:31:42, sollte als Antwort erst 00003E2600C127CA (siehe oben) vom Stick kommen das er die Anfrage bekommen hat und weiterschickt.
    Je nachdem welchen Circle ihr abfragt dauert es kurz(je nach erreichbarkeit) bis die Antwort des Circle kommt.

    Dann endlich was wir wollen
    0013 Antwort auf 0012
    3E26 Abfrage Nr
    00
    0Dxx0000Dxxxxx die MAC Adresse des Circle
    000B Anzahl der Pulse pro s
    0057 Anzahl der Pulse pro 8s
    00001053 Totale Anzahl der Pulse
    FFFF soll was mit Energieerzeugung zu tun haben (soll man anscheiend mit Plugwise auch messen können)
    FDD3 soll was mit Energieerzeugung zu tun haben
    0007 soll was mit Energieerzeugung zu tun haben
    3D6F CRC Checksumme


    So versucht doch mal ob ihr auch solche Werte rausbekommt. Oder zeigt mal was bei euch rauskommt. Bei mir hats Stunden gedauert bis ich überhaupt mal was anderes als immer die gleiche Antwort/Fehler vom Stick zurückbekommen hab, lag halt an der blöden CRC Summe.


    Um das Umrechenen bzw. die integration in IPS können wir uns dann immernoch kümmern wenn es bei euch erstmal soweit klappt.

    Gruß Jannis
    Angehängte Grafiken Angehängte Grafiken  

  5. #5
    Registriert seit
    Jan 2007
    Ort
    Etzenrot
    Beiträge
    155

    Hallo

    Hab gerade nen kleinen Fehler beim CRC umrechnen gefunden.
    Führende Nullen werden beim dechex natürlich verschluckt.

    Wenn der CRC z.B.: 03b3 ist gibt die dechex funktion leider nur 3b3 aus und ist somit natürlich falsch.

    War bei mir jetzt bei einem von 10 Circlen.

    Daher muss noch das eingefügt werden.

    PHP-Code:
    $ausgabe str_pad($ausgabe,'0'STR_PAD_LEFT); 
    Habs oben mal abgeändert.

    Vielleicht war ja das einer der Fehler bei euch.


    Gruß Jannis

  6. #6
    Registriert seit
    Jun 2010
    Ort
    Koblenz
    Beiträge
    235

    Hi Jannis,

    vielen Dank für deine Mühe - bei mir kommt aber noch immer Schrott:


    So öffne ich den Port:


    In der Hex-Ansicht kann ich durchaus Parallelen erkennen, wobei die Antworten viel zu kurz sind... na mal sehen - ich forsche weiter :-)

    Gruß,
    Markus
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	plugwise_regvar.jpg 
Hits:	3284 
Größe:	18.7 KB 
ID:	15495   Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	serial_port.jpg 
Hits:	3297 
Größe:	23.4 KB 
ID:	15496  
    SmartHome: IPS 5.x Stable Unlimited auf RaspberryPi 3b+ / div. HM Produkte (GW: Homematic CCU2) / GHL Profilux III / IPSView / div. Z-Wave Produkte (GW: Fibaro HC2) / NETATMO / 1-Wire
    IT-Infrastruktur: UniFi WIFI / Switches / Firewall, QNAP NAS

  7. #7
    Registriert seit
    Jan 2007
    Ort
    Etzenrot
    Beiträge
    155

    Okay erstes Problem gefunden.
    Baud ist 115200

    Na das war doch einfach

  8. #8
    Registriert seit
    Jun 2010
    Ort
    Koblenz
    Beiträge
    235

    tja - kaum macht man es richtig, klappt's auch ...
    wie gut, dass das Problem wie so oft VOR dem PC saß ;-)

    Viele Grüße & vielen Dank,
    Markus
    SmartHome: IPS 5.x Stable Unlimited auf RaspberryPi 3b+ / div. HM Produkte (GW: Homematic CCU2) / GHL Profilux III / IPSView / div. Z-Wave Produkte (GW: Fibaro HC2) / NETATMO / 1-Wire
    IT-Infrastruktur: UniFi WIFI / Switches / Firewall, QNAP NAS

  9. #9
    Registriert seit
    Jan 2007
    Ort
    Etzenrot
    Beiträge
    155

    Super ein Problem weniger.

    Wollte eigentlich noch mein Auslesescript online stellen, aber der PC zuhause ist abgestürtzt und ich bekomm ihn vom Geschäfft nicht wieder an.
    Aber heute Abend stell ichs online.

    Damit werden schonmal die wichtigsten Infos(in HEX) ausgegeben.
    Fürs umrechnen von den Pulsen in Watt brauch ich dann aber die Integer bzw. Float Werte, aber da bin ich dran.


    Gruß Jannis

  10. #10
    Registriert seit
    Jan 2010
    Ort
    Stockstadt am Rhein
    Beiträge
    51

    Hallo Markus,
    Hallo Jannis,

    es wird Licht Das Entscheidende bei mir war die Baudrate! Jetzt können wir gemeinsam weiter entwickeln...

    Grüße
    Grebi
    • IPS unlimited V.4.3 auf RaspberryPi

Ähnliche Themen

  1. Siri @home
    Von mäc im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 285
    Letzter Beitrag: 13.06.13, 12:47
  2. Von Newbie für Newbies: Register Variablen
    Von jwka im Forum Skripte, PHP, SQL
    Antworten: 18
    Letzter Beitrag: 26.11.12, 21:02
  3. "Notfall-IPS" leicht gemacht... ? Backup Server einrichten
    Von roadsterhh im Forum Alles rund um den PC
    Antworten: 4
    Letzter Beitrag: 11.07.12, 14:05
  4. Antworten: 2
    Letzter Beitrag: 25.07.11, 23:35