Ankündigung

Einklappen
Keine Ankündigung bisher.

Skript für Smarte Steckdosenleisten (Netio4All)

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

    Skript für Smarte Steckdosenleisten (Netio4All)

    Hallo Zusammen,
    ich bin neu hier, wollte euch aber dennoch mein Skript nicht vorenthalten.
    Die Smarten Steckdosen NETIO4All wollte ich bei OpenHAB integrieren.
    Jeweils vier Steckdosen können angesteuert und die Momentanleistung abgelesen werden.
    Die Steckdosen waren mal bei Reich**t zu kaufen, jedoch kann ich nicht sagen ob es die noch gibt, ich hab die Steckdose als Austausch vom Hersteller bekommen. Leider muss auch eine der Austauschgeräte wieder dahin, ein Relais ist festgebraten.

    Der Hersteller liefert ein Python Skript um den Status der Steckdose anzuzeigen. (Das Skript habe ich angepasst und das Passwort direkt in das Skript eingeben (default: admin), außerdem habe ich die Ausgabe Regex verträglich gemacht)
    Bestimmt geht es auch anders, aber so finde ich es sehr performant.

    Lange rede, kurzer Sinn, hier mein Skript für zwei Steckdosen (rules von OpenHAB)
    Code:
    rule "NETIO"
    when
        Time cron "*/20 * * * * ?"
    then   
            var String command1
            command1 = "python /volume1/public/OpenHAB/configurations/scripts/consumption.py 10.0.0.1"
            var String cons1 = executeCommandLine(command1, 2000)
            var Pattern power = Pattern::compile("::(ON|OFF):(ON|OFF):(ON|OFF):(ON|OFF):(.*):(.*):(.*):(.*):")
            var Matcher m1 = power.matcher(cons1)
            if (m1.matches()) {
            if(m1.group(1)!=Port1_1.state){
            postUpdate(Port1_1, m1.group(1) )}
            if(m1.group(2)!=Port1_2.state){
            postUpdate(Port1_2, m1.group(2) )}
            if(m1.group(3)!=Port1_3.state){
            postUpdate(Port1_3, m1.group(3) )}
            if(m1.group(4)!=Port1_4.state){
            postUpdate(Port1_4,m1.group(4) )}
            postUpdate(Port1_1c,    Integer::parseInt(m1.group(5)))
            postUpdate(Port1_2c,    Integer::parseInt(m1.group(6)))
            postUpdate(Port1_3c,    Integer::parseInt(m1.group(7)))
            postUpdate(Port1_4c,    Integer::parseInt(m1.group(8)))
    end
    
    rule "Port1_1" when Item Port1_1 changed then if(Port1_1.state==OFF) {sendHttpGetRequest("http://Smartmeter1/event?port=0uuu&pass=Smartmeter1")} else {sendHttpGetRequest("http://Smartmeter1/event?port=1uuu&pass=Smartmeter1")} end
    //Schalten eines Ausgangs
    Grüße

    Dominic
    Angehängte Dateien

    #2
    Die NETIO4All Steckdosenleisten sehen interessant aus, diese scheinen aber derzeit nirgends verfügbar zu sein. Gibt es Alternativen? Ich habe bei ELV noch die EG-PM2-LAN 6fach IP-Steckdosenleisten gefunden, lassen sich diese ebenfalls einfach per openHAB ansprechen?

    Kommentar


      #3
      Ich habe mir mal die hier gegönnt. Werde sie demnächst in OH einbinden. Wenn es alles so funktioniert, dann ist es ein echtes Schnäppchen. Für 80 Euro ... LAN und WLAN, offenes (Linux) System, 6 Ports, und alle mit Verbrauchsmessung!

      Kommentar


        #4
        zur Verfügbarkeit kann ich nichts sagen,
        allerdings denke ich ,dass Reichelt mal wieder Lieferschwierigkeiten hat.
        Zu den Netio 230B (Vorgänger) kann ich sagen:
        Schon bei kleinen Stromschwankungen (Protokolliert mit den 546e Smartmetern von AVM) verweigerten die Netio 230B ihren Dienst.

        Da haben die Leute von Koukaam nun nachgebessert, allerdings scheint nun das Relais einer Steckdose abgeraucht zu sein.
        (Die ist zwar jeden Tag an, aber es laufen nur 2-3 Watt darüber)
        Nun ist die Dose dauer-An, auch wenn das Relais (akkustisch) schaltet.

        Ich hab die allerdings auch gegen Erstattung der Portokosten und die alten Outlets bekommen. (ca 80€ pro Stück also)
        (direkt vom Hersteller, der Kundenservice von Reichelt war ein Witz, leider)

        Verbesserungspotential:
        Verbrauchsdaten auch in Float darstellung, aktuell nicht möglich (nur ganzzahlig)
        Mehr möglichkeiten zur Modifizierung, die Dinger haben wohl 4GB Flash-Speicher, also reicht wohl für kleine Spielereien aus.
        Ebenso wie das Sandbox System, zwar sicher, aber in gewissen Fällen schwierig.

        Hätten die Opensource Dinger Ethernet, würde ich es mir überlegen, da ich ja in kürze eine Steckdose einschicken muss.

        Kommentar


          #5
          Zitat von mweb Beitrag anzeigen
          Werde sie demnächst in OH einbinden. Wenn es alles so funktioniert, dann ist es ein echtes Schnäppchen. Für 80 Euro ... LAN und WLAN, offenes (Linux) System, 6 Ports, und alle mit Verbrauchsmessung!
          Danke für den Tipp! Mir hätte im Grunde eine einfache Leiste mit RJ45 (ohne WLAN) und ohne Verbrauchsmessung bereits genügt, dann wäre es z.B. die NETIO-230B geworden - diese ist aber leider nicht mehr erhältlich Das man direkten SSH-Zugriff hat, ist allerdings ein enormer Vorteil. Kannst du noch etwas über die Schaltgeschwindigkeit sagen, erfolgt diese ohne grosse Verzögerung? Sind alle 6 Ports schalt-/messbar?

          Kommentar


            #6
            Skript

            Edit: Nun funktioniert auch die Überprüfung ob ein Update notwendig ist.
            Habe nachgelesen, und erfahren, Schalter besitzen den OnOffTypus, also nicht direkt mit Strings zu vergleichen, diese können aber auf Strings reagieren.

            daher reicht das hinzufügen von .toString hinter das Item

            Code:
                    if (m1.group(1) != Port1_1.state.toString) {
                    postUpdate(Port1_1, m1.group(1) )}
            Nun spare ich mir 8 Zeilen Logfile, Falls sich nichts verändert hat.
            (Das passiert ohnehin nur wenn der Schaltzustand manuell verändert wird)

            Kommentar


              #7
              Zitat von michaeljk Beitrag anzeigen
              Kannst du noch etwas über die Schaltgeschwindigkeit sagen, erfolgt diese ohne grosse Verzögerung? Sind alle 6 Ports schalt-/messbar?
              Noch ist die Leiste nicht eingetroffen. Ich werde berichten. Ja ALLE 6 Ports sind einzeln schalt und messbar. Das Gerät selbst soll um die 1 Watt verbrauchen. Alles ziemlich traumhaft für den Preis, finde ich.

              Kommentar


                #8
                Zitat von michaeljk Beitrag anzeigen
                Die NETIO4All Steckdosenleisten sehen interessant aus, diese scheinen aber derzeit nirgends verfügbar zu sein. Gibt es Alternativen? Ich habe bei ELV noch die EG-PM2-LAN 6fach IP-Steckdosenleisten gefunden, lassen sich diese ebenfalls einfach per openHAB ansprechen?
                Für die EG-PM2-LAN hab ich ein Binding geschrieben, ist als Energenie Binding im Wiki gelistet und mit OH1.6 released. War nur in der Release Note nicht enthalten.

                Gruß
                Hans-Jörg

                Kommentar


                  #9
                  Zitat von hmerk Beitrag anzeigen
                  War nur in der Release Note nicht enthalten.
                  Hm, sehr schade, dass das verloren ging. Hast Du Thomas darauf hingewiesen?

                  Grüße,
                  Kai

                  Kommentar


                    #10
                    Ne, hatte ich eigentlich vor gehabt, war mir dann aber selber wieder durch gegangen.
                    Sollte jetzt auch keine Kritik sein.

                    Gruß
                    Hans-Jörg

                    Kommentar


                      #11
                      Naja, es ist aber ein Zeichen, dass der Releaseprozess verbessert werden sollte, damit sowas nicht passiert.

                      Kommentar


                        #12
                        Hi Hans-Jörg,

                        Zitat von hmerk Beitrag anzeigen
                        Für die EG-PM2-LAN hab ich ein Binding geschrieben, ist als Energenie Binding im Wiki gelistet und mit OH1.6 released. War nur in der Release Note nicht enthalten.
                        sorry, dass tut mir Leid!

                        Habe ich natürlich sofort nachgeholt!

                        Gruß und einen guten Rutsch,

                        Thomas E.-E.
                        Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                        Kommentar


                          #13
                          Danke Thomas,
                          Euch allen auch einen guten Rutsch.

                          Viele Grüße
                          Hans-Jörg

                          Kommentar


                            #14
                            @Dominic
                            Ich fand das Konstrukt
                            var Pattern power = Pattern::compile(":ON|OFF)ON|OFF)ON|OFF)ON|OFF).*).*).*).*):")
                            var Matcher m1 = power.matcher(cons1)

                            sehr interessant.
                            Irgendwie scheint es Tricks in der DSL von OPENHAB zu geben, wie man Java Klassen nutzbar macht.
                            Wenn ich Dein Beispiel kopiere, meckert der Designer. Ist das bei Dir auch so?

                            Gibt es irgendwo eine Dokumentation, aus der sich erschließt mit welche Syntax Java Klassen und Methoden in OPENHAB nutzbar sind?

                            Ich würde gerne die Java Methode split nutzen und folgenden Java Code in OPENHAB übersetzen.

                            String phrase = "a,b,c,d";
                            String delims = ",";
                            String[] tokens = phrase.split(delims);

                            dann sollte
                            token(1) == "a"
                            token(2) == "b"
                            token(3) == "c"
                            token(4) == "d"

                            herauskommen.

                            Ich habe schon versucht.
                            var String phrase = "a,b,c,d"
                            var delim = ","
                            var String[] tokens = message::split(delim)

                            aber der Designer "übergibt" sich gerade mal wieder ;-)

                            Kommentar


                              #15
                              Ich habe es mit Herumfummeln selber herausgefunden.
                              Der Code oben muss lauten:

                              var delim = ","
                              var String[] tokens = message.split(delim)

                              var String command= tokens.get(0)
                              var String token= tokens.get(1)
                              ...

                              Wenn message = "a,b,c,d" ist, dann wird
                              command== a
                              token == b usw.

                              Kommentar

                              Lädt...
                              X