+ Antworten
Seite 1 von 2 1 2 LetzteLetzte
Ergebnis 1 bis 10 von 18
  1. #1
    Registriert seit
    Nov 2012
    Ort
    Oldenburg
    Beiträge
    478

    Standard LG HomBot Script

    Moin,

    hier mal meine Scriptsammlung für den Staubsaugerroboter von LG. Vllt. kann ja jemand damit etwas anfangen.

    Es geht los mit einer Übersicht des Baums.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS Home 2017-04-25 13-53-14.jpg 
Hits:	138 
Größe:	46.4 KB 
ID:	38964

    Viele der Variablen werden aus dem "ProcessData" Script erzeugt. Aber manche halt auch eben nicht. Dafür hier die Beschreibung dazu.

    Variable Cam

    String Variable - ~HTMLBox Profil.

    Code:
    <script type="text/javascript" src="/user/HomBot/cam.js"></script><div style='width:100%;height:100%;' id="cam"><center><canvas id="cam_canvas" width="320" height="240"></canvas></center></div>
    Den folgenden Code als File unter ../webfront/user/HomBot/cam.js ablegen.
    HOMEBOTIP entsprechend anpassen! Dies setzt natürlich eine static IP voraus.

    Code:
    function drawSnapshot()
    {
         var
             yuvUrl = 'http://HOMBOTIP:6260/images/snapshot.yuv',
             canvas = document.getElementById('cam_canvas'),
             context = canvas.getContext('2d'),
             width = canvas.width,
             height = canvas.height,
             outputImage = context.createImageData(width, height),
             outputImageData = outputImage.data
         ;
         var xhr = new XMLHttpRequest();
         xhr.open('GET', yuvUrl, true);
         xhr.responseType = 'arraybuffer';
         xhr.onload = function() {
             var yuvData = new Uint8Array(xhr.response), y, u, v;
             for (var i = 0, p = 0; i < outputImageData.length; i += 4, p += 1)
             {
                 y = yuvData[ p ];
                 v = yuvData[ Math.floor(width * height * 1.5 + p /2) ];
                 u = yuvData[ Math.floor(width * height + p / 2) ];
                 outputImageData[i]   = y + 1.371 * (v - 128);
                 outputImageData[i+1] = y - 0.336 * (u - 128) - 0.698 * (v - 128);
                 outputImageData[i+2] = y + 1.732 * (u - 128);
                 outputImageData[i+3] = 255;
             }
             context.putImageData(outputImage,0,0);
    		 
             window.setTimeout('drawSnapshot()', 1000);
         }
         xhr.send(null);
    }
    
    drawSnapshot();

    Variable Map

    Das ist ein wenig umständlich gelaufen, aber funktioniert am Ende doch ganz gut. Und zwar wird die Map durch einen andern Dienst erstellt. Das nachfolgende Skript triggert die Erstellung an und legt dann eine Grafik ab, die wiederum von IPS zur Darstellung heran gezogen wird. Infos zum externen Tool folgen später.

    Skript "Fahre zur Ladestation"


    PHP-Code:
    <?
        $scriptName 
    "HomBot";
        
    $hombotIP "HOMBOTIP";

        
    IPS_LogMessage($scriptName,"Schicke Hom-Bot zur Aufladestation");
        
    file_get_contents("http://".$hombotIP.":6260/json.cgi?%7b%22COMMAND%22:%22HOMING%22%7d");
    ?>

    Skript "Pausiere Saugvorgang"

    PHP-Code:
    <?
        $scriptName 
    "HomBot";
        
    $hombotIP "HOMBOTIP";

        
    IPS_LogMessage($scriptName,"Pausiere Hom-Bot");
        
    file_get_contents("http://".$hombotIP.":6260/json.cgi?%7b%22COMMAND%22:%22PAUSE%22%7d");


    ?>
    Skript "Starte Saugvorgang"

    PHP-Code:
    <?
        $scriptName 
    "HomBot";
        
    $hombotIP "HOMBOTIP";

        
    IPS_LogMessage($scriptName,"Starte Hom-Bot");
        
    file_get_contents("http://".$hombotIP.":6260/json.cgi?%7b%22COMMAND%22:%22CLEAN_START%22%7d");

    ?>
    Skript "ProcessCommand"

    Die folgenden Variablen erhalten eine CustomAction auf das folgende Skript

    Modus/Turbo/Wiederholen. Bitte die VariablenIDs und ScriptID im Skript anpassen.

    PHP-Code:
    <?
        $scriptName 
    "HomBot";
        
    $hombotIP "HOMEBOTIP";

        
    IPS_LogMessage($scriptName,"Process command...");

        if (
    $_IPS["VARIABLE"] == 13757 /*[Hom-Bot\Modus]*/)
        {
           if (
    $_IPS["VALUE"] == 1)
           {
                
    IPS_LogMessage($scriptName,"Modus ZickZack");
                
    $jsonRequest "{\"COMMAND\":{\"CLEAN_MODE\":\"CLEAN_ZZ\"}}";
            }
           else if (
    $_IPS["VALUE"] == 2)
           {
                
    IPS_LogMessage($scriptName,"Modus Cell-By-Cell");
                
    $jsonRequest "{\"COMMAND\":{\"CLEAN_MODE\":\"CLEAN_SB\"}}";
            }
           else if (
    $_IPS["VALUE"] == 3)
           {
                
    IPS_LogMessage($scriptName,"Modus Spot");
                
    $jsonRequest "{\"COMMAND\":{\"CLEAN_MODE\":\"CLEAN_SPOT\"}}";
            }

        }
        else if (
    $_IPS["VARIABLE"] == 57250 /*[Hom-Bot\Turbo]*/)
        {
           if (
    $_IPS["VALUE"])
           {
                
    IPS_LogMessage($scriptName,"Turbo AN");
                
    $jsonRequest "{\"COMMAND\":{\"TURBO\":\"true\"}}";
            }
            else
            {
                
    IPS_LogMessage($scriptName,"Turbo AUS");
                
    $jsonRequest "{\"COMMAND\":{\"TURBO\":\"false\"}}";
            }
        }
        else if (
    $_IPS["VARIABLE"] == 43559 /*[Hom-Bot\Wiederholen]*/)
        {
           if (
    $_IPS["VALUE"])
           {
                
    IPS_LogMessage($scriptName,"Wiederholen AN");
                
    $jsonRequest "{\"COMMAND\":{\"REPEAT\":\"true\"}}";
            }
            else
            {
                
    IPS_LogMessage($scriptName,"Wiederholen AUS");
                
    $jsonRequest "{\"COMMAND\":{\"REPEAT\":\"false\"}}";
            }
        }


        
    $url "http://".$hombotIP.":6260/json.cgi?".urlencode($jsonRequest);
        
    IPS_LogMessage($scriptName,$url);
        
    file_get_contents($url);
        
    IPS_Sleep(1000);
        
    IPS_RunScript (36271 /*[Hom-Bot\ProcessData]*/);
        
    ?>

    Skript "ProcessData"


    PHP-Code:
    <?
        
    include "orga.php";

        
    $scriptName "HomBot";
        
    $hombotIP "HOMBOTIP";
        
        
    // Die ID des Webfront Konfigurators
        
    $webfrontID xxxxx;

        
    IPS_LogMessage($scriptName,"Process data...");
        
    $catID IPS_GetParent($_IPS["SELF"]);
        

        
    $url "http://".$hombotIP.":6260/status.txt";

        
    // Bevor das Gerät abgefragt wird, muss geschaut werden ob es noch am Netz ist. Er fällt ja gerne mal aus, wenn er fest hängt.
        
    if (!Sys_Ping($hombotIP2000))
        {
           
    // War er beim letzten Test schon nicht erreichbar?
            
    $lastVal getVariable($catID,"Erreichbar");
           
    //        if (is_null($lastVal) || $lastVal == true)
    //            WFC_PushNotification($webfrontID,"Fehler","HomBot FEHLER - Nicht mehr erreichbar. Festgefahren?","Fehler",0);

            
    CreateVariable("Erreichbar"0,false "reachable"$catID );

        }
        else
        {

            
    CreateVariable("Erreichbar"0,true "reachable"$catID );
            
    CreateVariable("Letzte Aktualisierung"1,time() , "lastMessage"$catID );

            
    // File_get_contents bringt den Webserver aufm HomBot zum Absturz
            
    $ch curl_init();
            
    curl_setopt($chCURLOPT_RETURNTRANSFERTRUE);
            
    curl_setopt($chCURLOPT_URL$url);
            
    $data curl_exec ($ch);

            
    $dataArray explode("\n",$data);

    //        IPS_LogMessage($scriptName,$data);

            
    $searchText "/(.*)=\"(.*)\"/";

            foreach(
    $dataArray as $dataEntry)
            {
                
    preg_match($searchText$dataEntry,$result);

                if (
    sizeof($result) != 3)
                   continue;

                if (
    $result[1] == "JSON_ROBOT_STATE")
                {
                   
    // Status mappen
                   
    $value 0// -> STATUS unknown

                    
    if ($result[2] == "CHARGING")
                       
    $value 1;
                    else if (
    $result[2] == "WORKING")
                       
    $value 2;
                    else if (
    $result[2] == "BACKMOVING_INIT")
                       
    $value 3;
                    else if (
    $result[2] == "DOCKING")
                       
    $value 4;
                    else if (
    $result[2] == "STANDBY")
                       
    $value 5;


                    if (
    $value == 0)
                        
    CreateVariable("Status unbekannt"3,$result[2] , "statusunknown"$catID );

                    
    CreateVariable("Status"1,$value "status"$catID );
                }
                else if (
    $result[1] == "JSON_BATTPERC")
                    
    CreateVariable("Batterie"1,$result[2] , "battery"$catID );
                else if (
    $result[1] == "JSON_TURBO")
                    
    CreateVariable("Turbo"0,$result[2] , "turbo"$catID );
                else if (
    $result[1] == "JSON_REPEAT")
                    
    CreateVariable("Wiederholen"0,$result[2] , "repeat"$catID );
                else if (
    $result[1] == "JSON_MODE")
                {
                   
    // Modus mappen
                   
    $value 0// -> MODE unknown

                    
    if ($result[2] == "ZZ")
                       
    $value 1;
                    else if (
    $result[2] == "SB")
                       
    $value 2;
                    else if (
    $result[2] == "SPOT"// Kann meiner wohl nicht
                       
    $value 3;


                    if (
    $value == 0)
                        
    CreateVariable("Modus unbekannt"3,$result[2] , "modeunknown"$catID );

                    
    CreateVariable("Modus"1,$value "mode"$catID );
                }
                else if (
    $result[1] == "CLREC_LAST_CLEAN")
                {
                    
    $date explode("/",$result[2]);
                    
    $value mktime ($date[3], $date[4], $date[5], $date[1], $date[2], $date[0]);
                    
                    
    CreateVariable("Letzte Reinigung"1,$value "lastClean"$catID );
                }
                
            }
        }


    function 
    getVariable($parentID,$varName)
    {
        
    // Variable vorhanden
        
    if($varID=@IPS_GetVariableIDByName($varName,$parentID))
        {
            return 
    GetValue($varID);
        }

        return 
    null;
    }

    ?>
    Dann noch das orga.php File entsprechend in den Skriptordner schmeissen.




    Und hier nun noch ein WebFront Beispiel, wie das so aussehen kann. Die Map ist in diesem Screener jetzt nicht wirklich repräsentativ. Ich hatte den Sauger letztens für den Alexa Test nur mal kurz hin und her fahren lassen. Da zeigt er nix von den Räumen. Bei Interesse poste ich gerne noch ein weiteres.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	hombot.jpg 
Hits:	175 
Größe:	154.2 KB 
ID:	38966

    So, dass ist mal alles wieder nur ganz kurz angerissen, aber es gibt schon mal ne Basis für weitere Diskussionen.

    Viel Spass
    Kevin
    Angehängte Dateien Angehängte Dateien
    Geändert von Spoosie (26.04.17 um 11:15 Uhr) Grund: 5ter Status

  2. #2
    Registriert seit
    Aug 2016
    Beiträge
    2,557

    Hallo Kevin,

    vielen Dank! Wird getestet, wenn der Robbi da ist.

    Grüße,
    Kai
    Geändert von KaiS (27.04.17 um 14:58 Uhr)
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV

  3. #3
    Registriert seit
    Nov 2012
    Ort
    Oldenburg
    Beiträge
    478

    Es fehlen noch 2 Variablenprofile die Modus und Status zugewiesen werden sollten.

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS Home 2017-04-26 12-12-56.jpg 
Hits:	77 
Größe:	53.9 KB 
ID:	38981

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	IPS Home 2017-04-26 12-12-39.jpg 
Hits:	85 
Größe:	81.4 KB 
ID:	38982

  4. #4
    Registriert seit
    Aug 2016
    Beiträge
    2,557

    Hallo Kevin,

    danke nochmal läuft alles...
    Aber ich konnte es mir nicht verkneifen: Siri - Bier holen - YouTube

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV

  5. #5
    Registriert seit
    Sep 2013
    Ort
    Niederösterreich
    Beiträge
    369

    Ich würde mal die Token für die Pushnachrichten aus dem Skript entfernen

    Und auf Anpingen zwecks Erreichbarkeit reagiert meiner auch ganz böse .... mit ich dreh jetzt mal das Wlan ab
    Geändert von manni (29.04.17 um 13:57 Uhr)
    Gruß Manfred
    IPS 4.2 | Win u. Symbox | IPSView | Wago | Homematic | IPS-868 | Philips HUE | Modbus | PV FroniusHybrid | USV (AEG/APC) | Qnap | Synology | IP Kameras | Hombot Gardena R70Li | Sony TV / AV | Sat Duo2 | Philips/Samsung TV | Sonos | Buderus | RPi | Arduino || Visu: 24", 10", 7" Tablets ....

  6. #6
    Registriert seit
    Nov 2014
    Ort
    Wien
    Beiträge
    196

    Hallo!

    ich habe meinen LG Robo mit einem WLan Stick ausgestattet und er ist schon über die WEB erreichbar

    Ich habe laut Anleitung alles installiert nur bekomme beim Skript ProcessData immer die Fehlermeldung in Zeile 44
    HTML-Code:
     $searchText = "/(.*)="(.*)"/";
    Was mache ich hier falsch?

  7. #7
    Registriert seit
    Aug 2016
    Beiträge
    2,557

    Welche Fehlermeldung erhältst du denn?

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV

  8. #8
    Registriert seit
    Nov 2014
    Ort
    Wien
    Beiträge
    196

    HTML-Code:
    Parse error:  syntax error, unexpected '(' in C:\IP-Symcon\scripts\ProcessData on line 44
    Abort Processing during Fatal-Error: syntax error, unexpected '('
       Error in Script C:\IP-Symcon\scripts\ProcessData on Line 44

  9. #9
    Registriert seit
    Aug 2016
    Beiträge
    2,557

    Tausch es mal gegen folgendes aus:

    PHP-Code:
    $searchText "/(.*)=\"(.*)\"/"
    Dir scheint da ein Backslash beim kopieren abhanden gekommen zu sein.

    Grüße,
    Kai
    IPS 5.2, auf Tinkerboard und RPI, piVCCU, Homematic & Homematic IP, diverse Tasmota Geräte, Shelly, GHoma, LG HomBot, Sonos, Tvheadend, HomeKit, AppleTV

  10. #10
    Registriert seit
    Nov 2014
    Ort
    Wien
    Beiträge
    196

    Super jetzt hab ich keine fehler in diesem Skript

    im skript ProcessCommand

    hab ich folgende fehlermeldung

    $jsonRequest = "{"COMMAND":{"CLEAN_MODE":"CLEAN_ZZ"}}";


    HTML-Code:
    Parse error:  syntax error, unexpected 'COMMAND' (T_STRING) in C:\IP-Symcon\scripts\ProcessCommand on line 12
    Abort Processing during Fatal-Error: syntax error, unexpected 'COMMAND' (T_STRING)
       Error in Script C:\IP-Symcon\scripts\ProcessCommand on Line 12

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 02.08.15, 20:34
  2. Script Event per Script erstellen wenn noch nicht vorhanden
    Von tommy86 im Forum Skripte, PHP, SQL
    Antworten: 1
    Letzter Beitrag: 13.06.13, 02:47
  3. Script mit einem anderen Script unterbrechen
    Von christianbre im Forum Skripte, PHP, SQL
    Antworten: 6
    Letzter Beitrag: 28.02.13, 19:41
  4. Antworten: 5
    Letzter Beitrag: 08.10.12, 10:26
  5. IR Trans problem bei Script aus Script aufruf.
    Von ThomasD im Forum Skripte, PHP, SQL
    Antworten: 0
    Letzter Beitrag: 30.01.10, 18:58