Ankündigung

Einklappen
Keine Ankündigung bisher.

"LBS-Pate" gesucht.

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    #16
    so, hab mein Suntrol LBS mal geändert:

    PHP-Code:
    ###[DEF]###
    [name        =SolarWorld (v0.9a)            ]

    [e#1 TRIGGER    = Trigger (optional)                ]
    [e#2 IMPORTANT    = Json-String    ]

    [a#1    = Aktueller Verbrauch (Haus/Batterie)                ]
    [a#2    = Aktueller Verbrauch (Haus)                    ]
    [a#3    = Einspeisung                    ]
    [a#4    = Batterie-Ladung Wh                    ]
    [a#5    = Batterie-Zustand                    ]
    [a#6    = Batterie-Ladung %                    ]
    [a#7    = Erzeugung PV                    ]
    [a#8    = Maximale Leistung PV                    ]
    [a#9    = Eigenstromversorgung                ]
    [a#10    = Bezug EVU                ]
    [a#11    = Ladestrom Batterie                ]
    [a#12    = Entladestom Batterie                ]
    [a#13    = Direkt Verbraucht von PV                ]
    [a#14    = Autarkie                ]
    [a#15    = Batterie-Ladung 0-255                ]
    ###[/DEF]###


    ###[HELP]###

    <h2>Ein- und Ausg�nge</h2>
    <h3>Eing�ne</h3>


    <h3>Ausg�nge</h3>    

    ###[/HELP]###
    Aktueller Verbrauch (Haus/Batterie) PowerSelfConsumption
    Aktueller Verbrauch (Haus)  PowerConsumption
    Einspeisung                PowerOut    
    Batterie-Ladung Wh    WorkCharge
    Batterie-Zustand    ModeConverter
    Batterie-Ladung %    StateOfCharge
    Erzeugung PV        PowerTotalPV
    Maximale Leistung PV PowerPVPeak
    Eigenstromversorgung PowerSelfSupply
    Bezug EVU            PowerIn
    Ladestrom Batterie
    Entladestom Batterie                
    Direkt Verbraucht von PV            
    Autarkie            
    Batterie-Ladung 0-255

    ###[LBS]###
    <?
    function LB_LBSID($id) {
        if ($E=getLogicEingangDataAll($id)) {  
            if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {    
                $json = (string)$E[2]['value'];
                //$json = $E[1]['value'];
                //$json = '{"PowerSelfConsumption":1379.4603809075945,"PowerConsumption":2596.748567966797,"PowerOut":0,"StatesOfCharge":{"WorkCharge":60,"ModeConverter":"DISCHARGING","StateOfCharge":1},"PowerTotalPV":1379.4603809075945,"PowerPVPeak":9900,"PowerSelfSupply":2575.2943900307573,"PowerIn":21.45417793603974,"PowerConsumptionMax":{"2017-09-24":4327.874227078623,"2017-09-23":5706.109233114997,"2017-09-22":5097.137145880682,"2017-09-18":5003.694712464589,"2017-09-21":5837.091378738959,"2017-09-19":7958.92557146933,"2017-09-20":5060.969388313184}}';
                $array = json_decode($json, true);

                //Verbrauch Gesamt
                if (isset ($array["PowerSelfConsumption"])) {
                    if (array_key_exists("PowerSelfConsumption", $array)) {
                        setLogicLinkAusgang($id,1,$array["PowerSelfConsumption"]);
                    }
                } else {   
                    setLogicLinkAusgang($id,1,"0");            
                }

                //Verbrauch
                if (isset ($array["PowerConsumption"])) {
                    if (array_key_exists("PowerConsumption", $array)) {                
                        setLogicLinkAusgang($id,2,$array["PowerConsumption"]);
                    }
                } else {   
                    setLogicLinkAusgang($id,2,"0");            
                }

                //Einspeisung
                if (isset ($array["PowerOut"])) {
                    if (array_key_exists("PowerOut", $array)) {  
                        setLogicLinkAusgang($id,3,$array["PowerOut"]);
                    }
                } else {   
                    setLogicLinkAusgang($id,3,"0");               
                }

                //Ladung kWh
                if (isset ($array["StatesOfCharge"]["WorkCharge"])) {
                    if (array_key_exists("WorkCharge", $array)) {  
                    setLogicLinkAusgang($id,4,$array["StatesOfCharge"] ["WorkCharge"]);
                    }
                } else {   
                    setLogicLinkAusgang($id,4,"0");                
                }

                //Zustand Batterie
                if (isset ($array["StatesOfCharge"] ["ModeConverter"])) {
                    if (array_key_exists("ModeConverter", $array)) {
                        setLogicLinkAusgang($id,5,$array["StatesOfCharge"] ["ModeConverter"]);
                    }           
                } else {   
                    setLogicLinkAusgang($id,5,"0");                
                }

                //Ladung %
                if (isset ($array["StatesOfCharge"] ["StateOfCharge"])) {
                    if (array_key_exists("StateOfCharge", $array)) {
                        setLogicLinkAusgang($id,6,$array["StatesOfCharge"] ["StateOfCharge"]);          
                    }
                } else {   
                    setLogicLinkAusgang($id,6,"0");             
                }            
                //Ladung 0-255
                if (isset ($array["StatesOfCharge"] ["StateOfCharge"])) {
                    if (array_key_exists("StateOfCharge", $array)) {
                        $ladezustand255 = ($array["StatesOfCharge"] ["StateOfCharge"]) * 2.55 ;                
                        setLogicLinkAusgang($id,15,$ladezustand255);      
                    }
                } else {   
                    setLogicLinkAusgang($id,15,"0");             
                }  


                //Erzeugung PV
                if (isset ($array["PowerTotalPV"])) {
                    if (array_key_exists("PowerTotalPV", $array)) {
                        setLogicLinkAusgang($id,7,$array["PowerTotalPV"]);    
                    }
                } else {   
                    setLogicLinkAusgang($id,7,"0");             
                }

                //Maximale PV Leistung
                if (isset ($array["PowerPVPeak"])) {
                    if (array_key_exists("PowerPVPeak", $array)) {
                        setLogicLinkAusgang($id,8,$array["PowerPVPeak"]);          
                    }
                } else {   
                    setLogicLinkAusgang($id,8,"0");             
                }             

                //Eigenversorgung
                if (isset ($array["PowerSelfSupply"])) {
                    if (array_key_exists("PowerSelfSupply", $array)) {
                        setLogicLinkAusgang($id,9,$array["PowerSelfSupply"]);  
                    }
                } else {   
                    setLogicLinkAusgang($id,9,"0");             
                }            

                //Strombezug
                if (isset ($array["PowerIn"])) {
                    if (array_key_exists("PowerIn", $array)) {                 
                        setLogicLinkAusgang($id,10,$array["PowerIn"]);           
                    }
                } else {   
                    setLogicLinkAusgang($id,10,"0");             
                }             

                // Ladestrom der Batterie berechnen            
                if (isset ($array["PowerTotalPV"]) && ($array["PowerConsumption"]) && ($array["PowerOut"])) {
                    if (array_key_exists("PowerConsumption", $array)) {      
                        $ladestrom = ($array["PowerTotalPV"]) - ($array["PowerConsumption"]) - ($array["PowerOut"]);
                        if ($ladestrom > 0) {
                            setLogicLinkAusgang($id,11,$ladestrom);    
                        }
                    } else {   
                        setLogicLinkAusgang($id,11,"0");             
                    }              
                }
                // Entladestom Batterie            
                if (isset ($array["PowerSelfSupply"]) && ($array["PowerTotalPV"])) {
                    if (array_key_exists("PowerConsumption", $array)) {      

                        // gesamtverbrauch - Bezug - Solarstrom
                        $entladestrom = ($array["PowerConsumption"]) - ($array["PowerTotalPV"]) - ($array["PowerIn"]) ;
                        if ($entladestrom <= "0"){
                            setLogicLinkAusgang($id,12,"0");
                        }   
                    } elseif (($array["StatesOfCharge"] ["StateOfCharge"]) == "0" ){
                         setLogicLinkAusgang($id,12,"0");
                    } else {
                        setLogicLinkAusgang($id,12,$entladestrom);    
                    }
                }             


                // Direkt von PV Verbraucht            
                if (isset ($array["PowerTotalPV"]) && ($array["PowerConsumption"])) {
                    if (($array["PowerConsumption"]) < ($array["PowerTotalPV"]) ) {
                        setLogicLinkAusgang($id,13,$array["PowerConsumption"]);    

                    } else {   
                        setLogicLinkAusgang($id,13,($array["PowerTotalPV"]));             
                    }              
                }           

                // Berechnung Autarkie            
                if (isset ($array["PowerConsumption"]) && ($array["PowerSelfSupply"])) {
                    if (($array["PowerConsumption"]) > ($array["PowerSelfSupply"]) )
                    {
                    $autarkie = round(($array["PowerSelfSupply"]) / ($array["PowerConsumption"]) * 100) ;
                        setLogicLinkAusgang($id,14,$autarkie);    
                    }
                    elseif (($array["PowerSelfSupply"]) < "10")  
                    {
                        setLogicLinkAusgang($id,14,"0");
                    }


                    else
                    {   
                        setLogicLinkAusgang($id,14,"100");             
                    }              



                }

            }
        }
    }
    ?>
    ###[/LBS]###


    ###[EXEC]###
    <?

    ?>
    ###[/EXEC]###

    Mal schauen ob mein Log sauber bleibt, danke euch.

    Mal noch eine andere Frage.
    Haben seit kurzen einen Vorwerk VR200. Kann es sein das es dafür noch kein LBS gibt? Zumindest hab ich nichts gefunden. Das einzige was sich interesannt anhört ist das node-koblod. Kann ich das ohne Schwirigkeiten einbinden? Auf was müsste ich da achten? Würde es überhaubt funktionieren?

    Danke euch

    Jürgen


    Kommentar


      #17
      Ja wäre ja nicht so schlimm, momemtan logge ich mit der Can BC nur mit

      Kommentar


        #18
        Ich logge momentan über das Can BC nur mit, aber du hast doch Eingänge.
        Über diese könnte man doch werte setzen sofern sie im UVR konfiguriert sind.

        Kommentar


          #19
          Über das CAN-BC kann man halt auch Werte von KNX über den CAN-Bus zur UVR schicken und so Sollwerte oder Funktionen beeinflussen.
          Das ist mit dieser Methode nicht möglich. Vorteil an der CMI-Methode ist man spart sich halt die Netzwerkeingänge die ja auf 16 begrenzt sind (1. Generation des CAN-BC).
          Allerdings kann der CMI nur alle 90 sec aktualisieren sonst streikt es. Es hat aber ein super Preis-/Leistungsverhältnis...

          Kommentar


            #20
            Hi, jetzt brach ich nochmal die PHP-Experten.

            Wir haben seit einiger Zeit einen Staubsaugerroboter von Vorwerk, den VR200. Den wollt ich in den letzen Tagen mit Edomi bekannt machen. Einen LBS dafür fand ich nicht also selbst versucht. Hab mit dann auch ein PHP-Skript gefunden mit dem ich mich auch Status abfragen und Befehle ausführen kann. Auf dem Trockenen so zu sagen, nicht in Edomi.

            Das findet man hier

            1. Hürde: Skript einbinden, hab ich gamacht...bzw. versucht. Die drei Skripte in das Verzeichnis /usr/local/edomi/main/include/php/botvac alle Rechte auf 0777.


            2. Hürde: Vorhandene Skripte bearbeiten:

            aus
            PHP-Code:
            require_once("NeatoBotvacApi.php"); 
            mach
            PHP-Code:
            require_once("/../../../../main/include/php/botvac/NeatoBotvacApi.php"); 

            Dann versucht LBS darum zu pfuschen... aber ich hab das gefühl es funkzioniert son die Einbindung der PHP-Skripte nicht. (hab sowas noch nicht gemacht)

            Mein LBS soll jetzt zum Test nur eine Verbindung aufbauen und am Ausgang 1 ein Array ausgeben welches so aussieht:

            Code:
             
             Array (     [version] => 1     [reqId] => 77     [result] => ok     [error] => ui_alert_invalid     [data] => Array         (         )      [state] => 3     [action] => 1     [cleaning] => Array         (             [category] => 2             [mode] => 1             [modifier] => 1             [spotWidth] => 0             [spotHeight] => 0         )      [details] => Array         (             [isCharging] =>              [isDocked] =>              [isScheduleEnabled] => 1             [dockHasBeenSeen] =>              [charge] => 79         )      [availableCommands] => Array         (             [start] =>              [stop] => 1             [pause] =>              [resume] => 1             [goToBase] =>          )      [availableServices] => Array         (             [houseCleaning] => basic-1             [spotCleaning] => basic-1             [manualCleaning] => basic-1             [easyConnect] => basic-1             [schedule] => basic-1         )      [meta] => Array         (             [modelName] => VR200             [firmware] => 2.1.4         )  )
            3. Hürde: Der LBS:

            Code:
            ###[DEF]###
            [name        =    VR200]
            
            [e#1        =     Trigger]
            [e#2        =     nichts]
            [e#3        =     nichts]
            
            
            [a#1        =    Array]
            [a#2        =     nichts]
            [a#3        =     nichts]
            ###[/DEF]###
            
            
            ###[HELP]###
            Vorlage: LBS mit EXEC-Script
            ###[/HELP]###
            
            
            ###[LBS]###
            <?
            function LB_LBSID($id) {
                if ($E=logic_getInputs($id)) {
                    if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {
                        callLogicFunctionExec(LBSID, $id);
                    }
            
                }
            }
            ?>
            ###[/LBS]###
            
            
            ###[EXEC]###
            <?
            require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
            require(dirname(__FILE__)."/../../../../main/include/php/botvac/NeatoBotvacClient.php");
            require(dirname(__FILE__)."/../../../../main/include/php/botvac/NeatoBotvacRobot.php");
            
            //bei Bedarf kann hier die maximale Ausführungszeit des Scripts angepasst werden (Default: 30 Sekunden)
            //Beispiele:
            //set_time_limit(0);    //Script soll unendlich laufen (kein Timeout)
            //set_time_limit(60);    //Script soll maximal 60 Sekunden laufen
            
            sql_connect();
            if ($E=logic_getInputs($id)){
                $email = "irrgend@jeman.de";
                $password = "-irrgendwas-";
                $token = "-geändert-"; // Token returned from authorize method
            
                $client = new NeatoBotvacClient($token);
                $robots = array();
                $event = array();
            
                $auth = $client->authorize($email, $password);
                $robots[] = new NeatoBotvacRobot($robot["serial"], $robot["secret_key"], $robot["model"] );
            
                    if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {
                    logic_setOutput($id,1,$robots); //auch schon mit $robots[] versucht selbe Problem
                    logic_setOutput($id,2,$email);
                    logic_setOutput($id,3,$password);
                    }
            
            
            
            
            }
            
            sql_disconnect();
            ?>
            ###[/EXEC]###
            selbst Ausgang 2 und 3 werden nicht ausgegeben.

            Kann mir Jemand einen Tip geben?



            Vielen Dank


            Jürgen

            Kommentar


              #21
              Du hast sicher auch einen Fehler im Fehlerlog bekommen.
              Du kannst keine arrays per logic_setOutput() ausgeben, sondern nur strings bzw. die Datentypen, die in PHP automatisch in Strings umgewandet werden.
              Dadurch steigt dein Skript beim ersten logic_setOutput() aus.

              Kommentar


                #22
                Danke, werd ich mal versuchen wenn ich Zeit hab.

                Meld mich dann nochmal

                danke

                Kommentar


                  #23
                  Hi Leute,

                  brauch nochmal Hilfe.
                  Es geht um das LBS für den Vorwerk VR200. Einloggen funktioniert schom mal. Nur mit der Auswertung hapert es so richtig. In einem normalen PHP-Skript bekomme ich mit:
                  PHP-Code:
                  foreach ($robots as $robot) {
                      
                  print_r($robot->getState());

                  ein Array das so daher kommt:


                  PHP-Code:
                    Array (     [version] => 1     [reqId] => 77     [result] => ok     [error] => ui_alert_invalid     [data] => Array         (         )      [state] => 1     [action] => 0     [cleaning] => Array         (             [category] => 2             [mode] => 1             [modifier] => 1             [spotWidth] => 0             [spotHeight] => 0         )      [details] => Array         (             [isCharging] =>              [isDocked] => 1             [isScheduleEnabled] => 1             [dockHasBeenSeen] =>              [charge] => 85         )      [availableCommands] => Array         (             [start] => 1             [stop] =>              [pause] =>              [resume] =>              [goToBase] =>          )      [availableServices] => Array         (             [houseCleaning] => basic-1             [spotCleaning] => basic-1             [manualCleaning] => basic-1             [easyConnect] => basic-1             [schedule] => basic-1         )      [meta] => Array         (             [modelName] => VR200             [firmware] => 2.1.4         )  ) 
                  Unbenannt.JPG

                  Wie kann ich die einzelen Werte so aufteilen dass ich sie jeweils auf einen Ausgang ausgeben kann?

                  Das wäre mir eine große Hilfe, danke euch.

                  Grüße

                  Jürgen

                  edit: Habs hinbekommen...
                  Zuletzt geändert von Jue; 16.03.2018, 16:10.

                  Kommentar


                    #24
                    Hi, bin schon ein Stück weiter. Kann nun alle Werte auslesen. Nur jetzt scheitert an den Starten bestimmter Aktionen des Saugers.

                    In dem Beispiel-Skrip ist es so, wenn ich das:

                    PHP-Code:
                    foreach ($robots as $robot) {
                    print_r($robot->startCleaning());

                    mache fängt er zum saugen an.

                    wie binde ich das in meinen LBS ein?

                    etwa so:??
                    PHP-Code:
                     if ($E[2]['refresh']==1) {
                                foreach (
                    $robots as $robot) {
                                
                    print_r($robot->startCleaning());
                            }
                        } 
                    Hier mal mein kompletter Code:

                    Code:
                    ###[DEF]###
                    [name        =    VR200]
                    
                    [e#1        =     Trigger]
                    [e#2        =     Start Cleaning]
                    [e#3        =     nichts]
                    
                    
                    [a#1        =    Version]
                    [a#2        =     ReqID]
                    [a#3        =     Result]
                    [a#4        =     Error]
                    [a#5        =    State]
                    [a#6        =    Action]
                    [a#7        =    Category]
                    [a#8        =    Mode]
                    [a#9        =    Modifier]
                    [a#10        =    SpotWidth]
                    [a#11        =    SpotHeight]
                    [a#12        =     is Charging]
                    [a#13        =     is Docked]
                    [a#14        =     is Schedule Enabled]
                    [a#15        =    Dock has been seen]
                    [a#16        =    Charge]
                    [a#17        =    Start available]
                    [a#18        =    Stop available]
                    [a#19        =    Pause available]
                    [a#20        =    Resume available]
                    [a#21        =    go to Base available]
                    [a#22        =     House Cleaning available]
                    [a#23        =     Spot Cleaning available]
                    [a#24        =     Manuel Cleaning available]
                    [a#25        =    Easy Connect available]
                    [a#26        =    Scheule available]
                    [a#27        =    Model Name]
                    [a#28        =    Firmware]
                    
                    
                    ###[/DEF]###
                    
                    
                    ###[HELP]###
                    Vorlage: LBS mit EXEC-Script
                    ###[/HELP]###
                    
                    
                    ###[LBS]###
                    <?
                    function LB_LBSID($id) {
                        if ($E=logic_getInputs($id)) {
                            if ($E[1]['refresh']==1 || $E[2]['refresh']==1) {
                                callLogicFunctionExec(LBSID, $id);
                            }
                    
                        }
                    }
                    ?>
                    ###[/LBS]###
                    
                    
                    ###[EXEC]###
                    <?
                    require(dirname(__FILE__)."/../../../../main/include/php/incl_lbsexec.php");
                    require(dirname(__FILE__)."/../../../../main/include/php/botvac/NeatoBotvacClient.php");
                    require(dirname(__FILE__)."/../../../../main/include/php/botvac/NeatoBotvacRobot.php");
                    
                    //bei Bedarf kann hier die maximale Ausführungszeit des Scripts angepasst werden (Default: 30 Sekunden)
                    //Beispiele:
                    //set_time_limit(0);    //Script soll unendlich laufen (kein Timeout)
                    //set_time_limit(60);    //Script soll maximal 60 Sekunden laufen
                    
                    sql_connect();
                    if ($E=logic_getInputs($id)){
                        $email = "jhjhh";
                        $password = "lgggg";
                        $token = "ea4ggg7g1bgg71aa"; // Token returned from authorize method
                    
                        $client = new NeatoBotvacClient($token);
                    
                    
                        $auth = $client->authorize($email, $password);
                    
                        if($auth !== false) {
                            $result = $client->getRobots();
                            logic_setOutput($id,1,"Anmeldung erfolgreich");
                    
                            if($result !== false) {
                                foreach ($result["robots"] as $robot) {            
                                    $robots[] = new NeatoBotvacRobot($robot["serial"], $robot["secret_key"], $robot["model"] );
                    
                                }
                    
                    
                    
                            }
                    
                    
                        } else {
                        //logic_setOutput($id,1,"Anmeldung fehlgeschlagen");
                        }
                    
                        foreach ($robots as $robot) {
                            $array = ($robot->getState());
                                    logic_setOutput($id,1,($array["version"]));
                                    logic_setOutput($id,2,($array["reqId"]));
                                    logic_setOutput($id,3,($array["result"]));
                                    logic_setOutput($id,4,($array["error"]));
                                    logic_setOutput($id,5,($array["state"]));
                                    logic_setOutput($id,6,($array["action"]));
                                    logic_setOutput($id,7,($array["cleaning"] ["category"]));
                                    logic_setOutput($id,8,($array["cleaning"] ["mode"]));
                                    logic_setOutput($id,9,($array["cleaning"] ["modifier"]));
                                    logic_setOutput($id,10,($array["cleaning"] ["spotWidth"]));
                                    logic_setOutput($id,11,($array["cleaning"] ["spotHeight"]));
                                    logic_setOutput($id,12,($array["details"] ["isCharging"]));
                                    logic_setOutput($id,13,($array["details"] ["isDocked"]));
                                    logic_setOutput($id,14,($array["details"] ["isScheduleEnabled"]));
                                    logic_setOutput($id,15,($array["details"] ["dockHasBeenSeen"]));
                                    logic_setOutput($id,16,($array["details"] ["charge"]));
                                    logic_setOutput($id,17,($array["availableCommands"] ["start"]));
                                    logic_setOutput($id,18,($array["availableCommands"] ["stop"]));
                                    logic_setOutput($id,19,($array["availableCommands"] ["pause"]));
                                    logic_setOutput($id,20,($array["availableCommands"] ["resume"]));
                                    logic_setOutput($id,21,($array["availableCommands"] ["goToBase"]));
                                    logic_setOutput($id,22,($array["availableServices"]["houseCleaning"]));
                                    logic_setOutput($id,23,($array["availableServices"]["spotCleaning"]));
                                    logic_setOutput($id,24,($array["availableServices"]["manualCleaning"]));
                                    logic_setOutput($id,25,($array["availableServices"]["easyConnect"]));
                                    logic_setOutput($id,26,($array["availableServices"]["schedule"]));
                                    logic_setOutput($id,27,($array["meta"]["modelName"]));
                                    logic_setOutput($id,28,($array["meta"]["firmware"]));
                    
                            if ($E[2]['refresh']==1) {
                                foreach ($robots as $robot) {
                                $robot->startCleaning();
                                }
                            }
                    
                    
                        }
                    
                    
                    
                    }
                    
                    sql_disconnect();
                    ?>
                    ###[/EXEC]###
                    Ein Tip reicht mir vielleicht...

                    Danke

                    Kommentar

                    Lädt...
                    X