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

    Standard Autoüberwachung mit OBD und Munic

    Hallo zusammen

    ich bin mal wieder(dank dieses Forums ) auf eine Erweiterung für meine Haussteuerung gestossen und zwar auf den OBD-Stecker(mit GPS- und GSM/GPRS-modul) von www.munic.io um auch PKW-Daten in IP-Symcon darzustellen. Musste ich gleich mal ausprobieren da ich sowas im Geschäft eh schon länger vorhatte. Das ganze kostet ca $149 und beinhaltet den Stecker, ein USB-OBD Kabel(das ich aber noch nicht gebraucht habe) und eine, für 3 Jahre freigeschaltete, Sim-Daten-Karte für anscheinend ganz Europa um die Daten des Fahrzeuges an munic.io zu senden.

    Das ist auch schon eine negative Seite des Produktes. Die Daten können nicht direkt an IP-Symcon geschickt werden, sonder werden vom Stecker an Munic.io gesendet und dann erst weitergeleitet.

    Was sendet der Stecker alles:
    - Fahrzeug gestartet
    - Fahrzeug bewegt ohne Zündung an
    - während der Fahrt alle paar Minuten die aktuelle GPS Position,GPS Geschwindigkeit,Gps Richtung
    - bei starker Beschleunigung, Starker bremsung, Richtungswechsel: die Geschwindigkeit und die Beschleunigungswerte
    - am Anfang und Ende einer Fahrt den Batteriestand in V, die gesamten gefahrenen KM einmal vom GPS einmal vom Fahrzeug seit der Stecker eingesteck wurde, der Tankstand (aus dem ich aber noch nicht schlau geworden bin)
    - Fehler des Autos sollen auch gesendet werden, aber auser Wischwasser leer hatte ich noch keinen Fehler im Auto und den sendet er schonmal nicht
    - bei einem Unfall sollen auch Daten gesendet werden, aber auch da fehlt mir zum Glück die Erfahrung
    - wenn der Stecker 24h nichts gesendet hat schickt er ein "Lebenszeichen"
    - Daten werden innerhalb von ein paar Minuten (1-5) in Ip-Symcon empfangen
    - es wird immer angegeben wann die Daten im Fahrzeug gesammelt wurden

    Die Ersteinrichtung war ganz leicht, einfach den Stecker in die OBD Buchse des Fahrzeuges stecken und kurz darauf kann man auf dem Testportal seine Daten anschauen.

    Um die Daten dann in IP-Symcon zu bekommen und auszuwerten wurde es schon schwieriger aber auch das hab ich mit meinen PHP Copy&Paste/und-dann-noch-irgendwie-anpassen Fähigkeiten geschafft.

    Auf deren Homepage gibt es die Möglichkeit einen Webhook einzurichten. Dafür eine PHP-Datei im Webfront Verzeichnis anlegen und das hier hineinschreiben.
    PHP-Code:
     <?php
     
    $postdata 
    $HTTP_RAW_POST_DATA;
    Setvalue(12345,$postdata);

    ?>
    Das gibt einfach die Daten die per Webhook geschickt werden an die Variable 12345 weiter.
    Die Datei(z.B. munic.php) muss von aussen erreichbar sein und diese Url (z.B. http://meineadresseort/munic.php) muss man Munic unter Settings/Get data on my server angeben.
    In IP-Symcon eine Variable anlegen, die ID (hier 12345) in der oben genannten Datei ändern.
    Jetzt ein Script erstellen das auf die Variablenaktualiesierung der Variable 12345 reagiert.
    PHP-Code:
    <?

    $wtag 
    = array("So","Mo","Di","Mi","Do","Fr","Sa");
    $json getvaluestring(12345);
    $fahrzeugdaten=json_decode($json);
    //print_r(($fahrzeugdaten)); //zum anzeigen aller empfangen Daten

    for ($i=0;$i<count($fahrzeugdaten);$i++)     //da auch mehrer Datenpakete bei einer Sendung enthalten sein können alle nacheinander abarbeiten
        
    {
        
    $payload $fahrzeugdaten[$i]->payload;
        foreach (
    $payload as $key=>$val)       //erstmal die Grunddaten auslesen die jedesmal mitgeschickt werden
            
    {
            if (
    is_string($key))
               {
                
    //print_r($val);
                  
    switch ($key)
                    {
                    case 
    "asset" :             //wenn man mehere Stecker im Einsatz hat kann man hier die Daten auseinander halten
                        
    if($val=="xxxxxxxxxxxxxxxx")
                            {
                            echo 
    "Pkw";
                            
    $idges=23456;
                            
    $idbat=34567;
                            
    $idkmgesamt=xxxxxx;
                            
    $idkmfahrt=xxxxxx;
                            
    $idpos=xxxxxx;
                            
    $idzuend=xxxxxx;
                            
    $typ="pkw";
                            }
                       elseif(
    $val=="yyyyyyyyyyyyyyy")
                            {
                            echo 
    "bus";
                            
    $idges=xxxxxx;
                            
    $idbat=xxxxxx;
                            
    $idkmgesamt=xxxxxx;
                          
    $idkmfahrt=xxxxxx;
                            
    $idpos=xxxxxx;
                            
    $idzuend=xxxxxx;
                            
    $typ="Bus";
                            }
                        echo 
    "\r\n";
                    break;
                    case 
    "recorded_at_ms" :          //Zeit wenn die Daten aufgezeichnet wurden
                       
    $zeit=$wtag[date("w",strtotime($val))].date(" H:i",strtotime($val));  //Einfachere Darstellung der Zeit
                        
    echo "Gesendet: ".$zeit."\r\n";
                    break;
                    case 
    "loc" :         // GPS Position
                          
    $pos $val[1].",".$val[0];
                        
    SetValueString($idpos,$pos);
                        echo 
    "Pos ".$pos."\r\n";
                        
    //IPS_RunScriptEx(98765/*[Zentrale\Notify\Notify versenden Ja]*/ , Array("app" => "Auto" , "event" => $typ."pos", "text" => $zeit."#".$pos ));

                    
    break;
                    case 
    "fields" :      //Auslesen der einzelen Felder, es werden nicht immer alle gesendet
                           
    foreach ($val as $keyfields=>$valfields)
                            {
                             if (
    is_string($keyfields))
                                  {
                                switch (
    $keyfields)
                                    {
                                   case 
    "MDI_OBD_FUEL" :         //Tankvariable noch keine wirkliche Ahnung was das soll
                                        
    echo "Fuel: ";
                                        echo 
    "Tank ".basetoint($valfields->b64_value);
                                      echo 
    "\r\n";
                                break;
                                case 
    "GPS_SPEED" :         //Geschwindigkeit
                                        
    $geschwindigkeit=basetoint($valfields->b64_value)/1000*1.852;  // umrechnung in km/h
                                        
    echo "Geschwindigkeit: ".$geschwindigkeit."\r\n";
                                        
    SetValueFloat($idges,$geschwindigkeit);

                                break;
                                case 
    "BEHAVE_ID" :
                                   
    $behave=basetoint($valfields->b64_value);
                                   switch (
    $behave)
                                            {
                                           case 
    10 :
                                           
    $grund="Stark gebremst";
                                       break;
                                       case 
    11 :
                                           
    $grund="Stark beschleunigt";
                                       break;
                                          }
                                        echo 
    $grund."\r\n";
                                    break;
                                    case 
    "BEHAVE_GPS_SPEED_BEGIN" :
                                        
    $anfangsges=basetoint($valfields->b64_value)/1000*1.852// umrechnung in km/h
                                    
    break;
                                    case 
    "BEHAVE_GPS_SPEED_PEAK" :
                                        
    $spitzenges=basetoint($valfields->b64_value)/1000*1.852// umrechnung in km/h
                                    
    break;
                                    case 
    "BEHAVE_GPS_SPEED_END" :
                                        
    $endges=basetoint($valfields->b64_value)/1000*1.852// umrechnung in km/h
                                    
    break;
                                    case 
    "BEHAVE_ELAPSED" :
                                        
    $dauer=basetoint($valfields->b64_value)/1000// // umrechnung muss ich noch schauen ob es stimmt
                                        
    echo $dauer."s\r\n";
                                    break;
                                    case 
    "MDI_EXT_BATT_VOLTAGE" :    //Batteriestand
                                        
    $bat=(basetoint($valfields->b64_value))/1000;
                                        echo 
    "Batterie: ".$bat."V \r\n";
                                        
    SetValueFloat($idbat,$bat);
                                    break;
                                    case 
    "ODO_FULL_METER" :
                                        echo 
    "kilometerilometer GPS: ".(basetoint($valfields->b64_value))."\r\n";
                                    break;
                                    case 
    "MDI_OBD_MILEAGE" :      //Gefahrene KM
                                        
    $km=(basetoint($valfields->b64_value));
                                        echo 
    "Gesamtkilometerilometer OBD: ".$km."\r\n";
                                        
    $alterstand=GetvalueInteger($idkmgesamt);
                                        
    SetValueInteger($idkmgesamt,$km);
                                        
    SetValueInteger($idkmfahrt,$km-$alterstand);
                                    break;
                                 case 
    "MDI_RECORD_REASON" :
                                        
    $reason=base64_decode($valfields->b64_value);
                                        switch (
    $reason[0])
                                            {
                                           case 
    :
                                               
    $grund="Zündung";
                                              if (
    $reason[2] == 0)
                                                 {
                                               
    $grund="Zündung aus";
                                                    
    SetValueBoolean($idzuend,false);
                                                    }
                                              if (
    $reason[2] == 1)
                                                 {
                                               
    $grund="Zündung an";
                                               
    SetValueBoolean($idzuend,true);
                                                    }
                                          break;
                                            case 
    1:
                                                if (
    $reason == "1:0;1;201")
                                               
    $grund="Keine Bewegung";
                                              if (
    $reason == "1:0;1:204")
                                               
    $grund="Keine Zündung";
                                            break;
                                            case 
    :
                                                if (
    $reason[2] == 0)
                                               
    $grund="Reise beendet";
                                              if (
    $reason[2] == 1)
                                               
    $grund="Reise begonnen";
                                            break;
                                            default :
                                               
    $grund="Unbekannt".$reason;
                                            break;
                                            }
                                        echo 
    "Grund: ".$grund."\r\n";
                                        
    //IPS_RunScriptEx(98765/*[Zentrale\Notify\Notify versenden Ja]*/ , Array("app" => "Auto" , "event" => $typ."info", "text" => $zeit."#".$grund ));

                                
    break;
                                    }
                                }
                        }
                    break;
                    }
                }
            }
        }






    function 
    basetoint($base)
    {
    $i0;

    $keyStr "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    do {
    $enc[$i] = strpos($keyStrsubstr($base$i1));
    $i++;
    } while (
    $i strlen($base));

    return ((
    $enc[1]<<20)|($enc[2]<<14)|($enc[3]<<8)|($enc[4]<<2)|($enc[5]>>4));
    }

    ?>
    Dann braucht man noch diese Variablen je Stecker(im Beispiel sind es Zwei Stecker) einmal:

    $idges für aktuelle Geschwindigkeit float
    $idbat für die Batterie float
    $idkmgesamt Gesamtkilometer integer
    $idkmfahrt Kilometer pro Fahrt integer
    $idpos Aktuelle Position string
    $idzuend Zündung an/aus bool

    Die Ids im Script ändern und die Assetnummer des Steckers anpassen.


    Oder das Script so abändern wie man möchte das IP-Symcon auf die einzelnen Daten reagiert.

    Die Auswertung der mit Base64 "verschlüsselten" Daten hat mich einiges an Zeit gekostet.
    Manches kann PHP direkt mit base64_decode darstellen, aber bei vielen Daten musste ich die function basetoint ausknobeln. Wahrscheinlich gibts irgendwo schon eine einfache function dafür, aber die hab ich noch nicht gefunden. Was mir bei der function noch fehlt ist die Umrechnung von den negativen base64 Zahlen. Bei manchen Zahlen hab ich schon die richtige Vorgehensweise gefunden aber die passt nicht überall. Wenn ich mal wieder Zeit habe knobel ich weiter.

    Wenn man die Daten loggen will sollte man bedenken das die geloggte Zeit nicht mit der tatsächlichen Zeit wann die Daten erstellt wurden übereinstimmt und das nicht der gesamte Weg aufgezeichnet wird sondern nur alle paar Minuten Daten gespeichert/gesendet werden.

    In den Wochen seit ich das jetzt im Einsatz habe gab es eigentlich keine nennenswerten Probleme/Aussetzer.

    Der Stecker konnte im Audi A4 ohne Veränderung dauerhaft eingebaut werden, beim Opel Vivaro musste ich die Buchse ausbauen damit der Stecker "unsichtbar" hinter der Abdeckung verschwindet.

    Jetzt hoffe ich das ich nichts vergessen habe und freue mich auf Fragen und/oder Verbesserungen.

    Gruß Jannis

  2. #2
    Registriert seit
    Oct 2007
    Ort
    Villach,Kärnten,Österreich
    Beiträge
    2,951

    Servus Jannis

    nette Idee, wollte das schon lange mal machen.

    Ich hab da aber noch einen anderen Lösungsweg im Kopf:
    China ELM327 Bluetooth Adapter -> altes Android Handy -> Torque App -> dazu gibts eine dokumentierte API -> IPS

    Vorteil wäre gewesen das man nicht zwingend eine GSM Verbindung braucht, da die App die Daten mit Timestamp zwischenspeichert und erst bei vorhandensein einer Internetverbindung (WLAN in der heimischen Garage) die Daten entweder an deren Server oder aber auch eine CSV Datei schreibt.

    Soweit alles Theorie, umgesetzt hab ichs noch nicht und werde aus Zeitgründen wohl auch nie dazu kommen.

    viel Glück mit deiner Lösung
    bb

  3. #3
    Registriert seit
    Jun 2012
    Ort
    Dresden
    Beiträge
    273

    Hallo Jannis,

    gibt es schon was neues zur Kopplung? Hab das Teil jetzt auch im Einsatz. Das einzige was bei mir wirklich in IPSymcon ankommt, sind die Koordinaten. Ich logge gerade mal die einzelnen Webhooks mit. Mal sehen ob man das irgendwie aufdröseln kann.
    Gruss Jürgen

    IP-Symcon V5.1 auf Acer Veriton N2620G (6GB RAM), Windows 7 Prof. 64 Bit / 2x ipad Terminal / ipad / iphone / IPS-868 / piVCCU3, 103 HM Devices / VSM-102 / Sonos / Logitech Harmony / Philips HUE / IPSView

  4. #4
    Registriert seit
    Jun 2011
    Beiträge
    506

    Hallo Jannis,

    wie geil ist das denn :0) das würde mich ja auch reizen.
    Man kann damit also auch ein Fahrtenbuch mit Verbrauch erstellen ?!

    Kannst vielleicht mal Screenshots machen wie du dir das gebastelt hast fürs Webfront. Geil wäre ja auch die einbindung einer google maps karte wo du gerade bist bzw. dein Auto ;0)

    Zu dem Preis von USD 149 kommt noch zoll und so drauf oder ? Wo kam die ware her ?

    VG

    Andreas
    Professional

  5. #5
    Registriert seit
    Jun 2012
    Ort
    Dresden
    Beiträge
    273

    Hallo Andreas,

    meinst Du sowas?
    Name:  ScreenShot139.jpg
Hits: 1680
Größe:  113.4 KB
    Gruss Jürgen

    IP-Symcon V5.1 auf Acer Veriton N2620G (6GB RAM), Windows 7 Prof. 64 Bit / 2x ipad Terminal / ipad / iphone / IPS-868 / piVCCU3, 103 HM Devices / VSM-102 / Sonos / Logitech Harmony / Philips HUE / IPSView

  6. #6
    Registriert seit
    Jun 2011
    Beiträge
    506

    Jap :0D

    Coole sache. hast also auch alles hinbekommen ... respekt !!! Und bist zufrieden
    Professional

  7. #7
    Registriert seit
    Jun 2012
    Ort
    Dresden
    Beiträge
    273

    naja,

    wie in #3 schon angemerkt. Positionsdaten und aktuelle Geschwindigkeit kommen gut an. Warte eigentlich noch auf Jannis, ob er da schon weiter gekommen ist.
    Gruss Jürgen

    IP-Symcon V5.1 auf Acer Veriton N2620G (6GB RAM), Windows 7 Prof. 64 Bit / 2x ipad Terminal / ipad / iphone / IPS-868 / piVCCU3, 103 HM Devices / VSM-102 / Sonos / Logitech Harmony / Philips HUE / IPSView

  8. #8
    Registriert seit
    Apr 2008
    Ort
    Swiss/Czech
    Beiträge
    1,180

    Was mich etwas stört ist die Webfreigabe der PHP nach Außen.. Wer schon einen Webserver freigibt dem ist das natürlich egal. Viel einfacher mit dem encoding und ohne PHP Freigabe wird's mit der API. Die ist schon lange versprochen mit coming soon:-) Kann bei verschiedenster SW verschieden lange dauern wie man weiß..
    IPS Ninja - Windows 10, 64 Bit Server - IR Trans - Eaton GW - Homematic CCU2 - FHZ - HMS - AKM, JKM + EKM 868 - Div. Sonos - Allnet 3690+91 -IOS/Win10 auf Clientseite - SILEX - SEH - QNAP - APC - Siemens OZW 672 - Homematic - Aviosys - BlueIris - Mobotix T25M, S15 und M12

  9. #9
    Registriert seit
    Jun 2011
    Beiträge
    506

    In china gibts auch sowas ;0) ... und das ohne Übermittlung an nen Server so weit ich das erkennen kann

    http://www.dx.com/p/heacent-908-quad...tracker-223929
    Professional

  10. #10
    Registriert seit
    Jun 2011
    Beiträge
    506

    Hallo :0)

    sagt mal wo habt ihr das Teil bestellt ???
    Ich habe bei munic.io nen Konto angelegt ... keine Antwort :0(

    VG

    Andreas
    Professional

Ähnliche Themen

  1. IF - Anweisung mit and und or
    Von bohrers im Forum Skripte, PHP, SQL
    Antworten: 16
    Letzter Beitrag: 22.11.13, 18:52
  2. Problem mit Reverse Proxy mit ARR und Rewrite im IIS und Version 3.0
    Von Strichcode im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 07.10.13, 14:13
  3. Highcharts (und andere externe URLs) mit SSL und Chrome
    Von wupperi im Forum Skripte, PHP, SQL
    Antworten: 1
    Letzter Beitrag: 13.02.13, 20:03
  4. CCU und IPS mit CC-TC und CC-VD Heizung
    Von Marko im Forum HomeMatic
    Antworten: 29
    Letzter Beitrag: 13.12.12, 08:18
  5. Geräte und PCs mit WOL und IPS einschalten
    Von Stromer im Forum Skripte, PHP, SQL
    Antworten: 4
    Letzter Beitrag: 16.06.11, 11:02

Stichworte