+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 10 von 27
  1. #1
    Registriert seit
    Nov 2014
    Beiträge
    560

    Standard Probleme mit SetReceiveDataFilter

    Hallo zusammen,

    ich bin zu blöd, den ReceiveDataFilter zu setzen, kann mir jemand helfen?

    PHP-Code:
    public function ApplyChanges() {
       
    $duoFernCode $this->ReadPropertyString("duoFernCode");
       if (!
    preg_match(DUOFERN_REGEX_DUOFERN_CODE$duoFernCode)) {
          
    $duoFernCode "XXXXXX";
       }

       
    $this->SetReceiveDataFilter("(.*" $duoFernCode ".*)");
       
    // $this->SetReceiveDataFilter("(.*" . $this->ConvertMsgToSend($duoFernCode) . ".*)");

    Die Nachrichten haben die Form: "0DFF0F400000000000000000000000000000FFFFFF01" und werden mit der Funktion für den Datenaustausch konvertiert:
    PHP-Code:
        private function ConvertMsgToSend($hex)
        {
            
    $str "";
            for (
    $i 0$i strlen($hex) - 1$i += 2) {
                
    $str .= chr(hexdec($hex [$i] . $hex [$i 1]));
            }

            return 
    $str;
        } 
    Es kommt nichts an und ich weiß nicht wie ich testen soll, ob die regex passt.

    Danke!

    Gruß Basti
    1011101010111010

  2. #2
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,135

    Hier kannst du es online ausprobieren:
    Online regex tester and debugger: PHP, PCRE, Python, Golang and JavaScript
    Dazu im Splitter das ganze JSON was mit SendDataToChildren weitergeleitet wird, mit SendDebug ausgeben.
    Das kannst du dann aus dem Debug-Reiter kopieren.
    Ebenso kannst du den FilterString im Device ja auch mit SendDebug ausgeben und dann auf regex101 prüfen ob er funktioniert.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  3. #3
    Registriert seit
    Nov 2014
    Beiträge
    560

    Danke, das hatte ich mit dem regex online tester versucht, allerdings habe ich mir nicht den JSONString ausgeben lassen und da ist der Fehler

    Code:
    {"DataID":"{244143D3-BABA-44D4-8740-B997B8F09E50}","Buffer":"\u000f\u00ff\u000f#\t\u0000\u0002\u0003P2\rd%\u0000\u00ffB_\u008ao\u00f5\u0081\u0001"}
    Wie mache ich das mit der UTF8 Kodierung?

    Müsste ich dann meine Expression mit utf8 kodieren? Stehe gerade auf dem Schlauch

    PHP-Code:
       $this->SetReceiveDataFilter("(.*" utf8_encode($duoFernCode) . ".*)"); 
    Danke!

    Gruß Basti
    1011101010111010

  4. #4
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,135

    Ich würde die Daten in Splitter schon zerlegen und dann anstatt Buffer eigene Datenpunkte per json übergeben.
    Den Gerätecode z.b. als normalen ASCII String. (Ob es sinnvoll ist den Rest auch schon vorher aufzubereiten kann ich dir aufgrund meiner fehlenden Kenntnis vom Protokoll nicht sagen.)

    Die Rohdaten welche du da hast, sind ja immer Bytes welche durch das JSON_encode so kodiert werden.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  5. #5
    Registriert seit
    Nov 2014
    Beiträge
    560

    Hm, ich hab die Nachrichten so gelassen wie es der Hersteller auch macht. Beim Senden der Daten an den Splitter sende ich die Daten auch in dem Format. Dann müsste ich alles umbauen, sonst sind die Nachrichten vom Aufbau unterschiedlich. Ich wusste noch gar nicht, dass man da im JSON Objekt eigene Eigenschaften hinzufügen kann, muss ich vielleicht mal in der Doku schauen.

    Danke

    Basti

    //EDIT: Ich weiß einfach noch zu wenig über den Aufbau der Nachrichten, als das ich das sinnvoll aufteilen könnte. Mehr als die Geräteadresse rausfiltern macht momentan noch keinen Sinn.
    Geändert von baba (27.05.17 um 21:55 Uhr)
    1011101010111010

  6. #6
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,135

    Ich nutze unterhalb vom Splitter nur eigene Formate, weil die Logik des Protokolle in jeder Instanz zu haben ist ja unnötig.

    In deinen Fall brauchst du dann auch keinen Splitter, wenn der eh nichts mit den Daten macht.

    Der Filter wird so auf jeden Fall ein schwierig.
    Eine richtig gute Idee wie du jetzt deine Adresse in das Format für den Filter bekommst, habe ich nicht parat.
    Eventuell ein Array mit Index Buffer und Wert dein Code (in binary).
    Den Code mit utf8encode in den Index schreiben.
    Und das Array dann mit json_encode in einen Json-String bringen.
    Dann musst du aber noch am Anfang und Ende etwas abschneiden, damit es passt.
    Wenn der Code immer am Anfang des Datenpaket steht, muss dann als Filter so etwas rauskommen:
    ,"Buffer":"\u000f\u00ff\u000f#\t\u0000\u0002
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  7. #7
    Registriert seit
    Nov 2014
    Beiträge
    560

    Ich habe den Code jetzt einfach hinten dran gehangen :-)

    Code:
    {"DataID":"{244143D3-BABA-44D4-8740-B997B8F09E50}","Buffer":"\u000f\u00ff\u000f#\u000f\u0000\u0002\u0003P2$\u0000\u0013\u0000\u0000L)@o\u00f5\u0081\u0001","DuoFernCode":"4CXX09"}
    Ich bin gerade als am überlegen wie ich es am besten mache, bin aber eigentlich zum Entschluss gekommen die Daten erstmal im Rohformat zu lassen, bis ich besser weiß wie die Daten genau aufgebaut sind. Anfangs war mein Plan: Ich lasse die Daten im Rohformat und es gibt für jedes Gerät nen eigenes Modul, was dann auch entsprechend andere Leute programmieren könnten, da ich vermutlich nie alle Geräte haben werde. Aber da das nun vermutlich auch generisch wird, kann ein neues Gerät natürlich auch alten Code gefährden.

    Gruß Basti

    P.S: Eine Projektidee für dich: Library mit fertigen Splitter, Configurator und Device mit interner Kommunikation, so dass man nur noch das Protokoll des Herstellers in den Splitter implementieren und ggf. Geräte anpassen muss :-)

    //EDIT: Ich müsst mir dann mal Gedanken über nen Format für ne interne Kommunikation machen. Ich wollte jetzt noch nen bisschen Konfigurator bauen und dann muss ich anfangen die Devices zu implementieren und das Protokoll weiter mitzuschneiden, ich denke da kann mir auch der ein oder andere von den Rademacher Usern noch helfen.
    Geändert von baba (27.05.17 um 23:36 Uhr)
    1011101010111010

  8. #8
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,135

    Geht nicht, weil der Sync bei BiDi Kommunikation ja bei jedem Protokoll anders ist.
    Aber ich baue gerade eine DemoModul mit Kommentaren, dies kann dann als Vorlage genutzt werden.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

  9. #9
    Registriert seit
    Nov 2014
    Beiträge
    560

    Ja Sync is halt so ne Sache bei mir, ich weiß zu wenig über das Protokoll und andere die es bisher versucht haben, haben das auch nicht so optimal implementiert. Aber bisher läufts stabil, mal sehen wies dann aussieht wenn richtig Traffic da ist.

    Das mit dem Demomodul ist ne schöne Sache und wird sicherlich einigen helfen.

    Gruß Basti

    P.S.: Für Fehlermeldungen z.B. wenn der Parent inaktiv ist ist trigger_error das richtige?
    Geändert von baba (27.05.17 um 23:42 Uhr)
    1011101010111010

  10. #10
    Registriert seit
    Jun 2012
    Ort
    House of Dragons @ Lübeck
    Beiträge
    9,135

    Das kommt darauf an wo und wie du den Fehler erkenntlich machen willst.
    Von throw Execption bin ich abgerückt, weil dann auch User-Scripte abgebrochen werden.
    trigger_error + Return false für Public Instanz Funktionen ist ganz brauchbar.
    Für RequestAction reicht auch echo um den Fehler im WF darzustellen.
    Michael
    on Win7VM (ESXi): I5, 24GB RAM, HW-RAID5, 3xSat | HW: CCU + 123 Geräte (506ch), EM1000, CUL, 1Wire, XBee, ELRO 433MHz, FritzBox Cable, Android Phone + Tablet, Samsung C-Serie TV +SamyGo-Ext, Onkyo NR| SW: IPS, Apache2(mod_ssl/PHP), MySQL, hMailServer, PRTG, Rising AV, Piwik, RoundCube, Wordpress, WinLIRC, WHS2011, MediaPortal, XBMC

Ähnliche Themen

  1. Probleme mit I/O Instanzen
    Von aluehmann im Forum Allgemeine Diskussion
    Antworten: 15
    Letzter Beitrag: 23.06.14, 19:08
  2. Probleme mit If
    Von Matze80 im Forum Skripte, PHP, SQL
    Antworten: 3
    Letzter Beitrag: 04.12.13, 19:25
  3. 1-Wire mit owos 8.3 Probleme mit DS2438
    Von composti im Forum 1-Wire, M-BUS
    Antworten: 15
    Letzter Beitrag: 29.07.13, 06:47
  4. Probleme mit Dyndns
    Von netsnake im Forum Mobile (iOS/Android)
    Antworten: 2
    Letzter Beitrag: 21.09.11, 19:42
  5. Probleme mit Qs
    Von deite im Forum IP-Symcon WIIPS für Version 1.0
    Antworten: 4
    Letzter Beitrag: 12.03.06, 10:49