Ankündigung

Einklappen
Keine Ankündigung bisher.

Skript für Smarte Steckdosenleisten (Netio4All)

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

    #16
    Hier noch einmal der bei mir lauffähige code,
    python sollte natürlich installiert sein, wenn das Skript genutzt wird.
    (Leider Steige ich grade bei deinem Skript nicht ganz durch, aber es ist auch schon spät.
    Mit (On|Off) wird ja nur festgelegt, dass der wert entweder oder ist, die Powerconsumption kann natürlich beliebig sein.

    Code:
    rule "NETIO"
    when
        Time cron "*/30 * * * * ?"
    then    
            var String command1
            var String command2
            command1 = "python /volume1/public/OpenHAB/configurations/scripts/consumption.py 10.0.0.1"
            command2 = "python /volume1/public/OpenHAB/configurations/scripts/consumption.py 10.0.0.2"
            var String cons1 = executeCommandLine(command1, 2000)
            var String cons2 = executeCommandLine(command2, 2000)
            var Pattern power = Pattern::compile("::(ON|OFF):(ON|OFF):(ON|OFF):(ON|OFF):(.*):(.*):(.*):(.*):")
            var Matcher m1 = power.matcher(cons1)
            var Matcher m2 = power.matcher(cons2)
            if (m1.matches()) {
            if (m1.group(1) != Port1_1.state.toString) {
            postUpdate(Port1_1, m1.group(1) )}
            if(m1.group(2) != Port1_2.state.toString){
            postUpdate(Port1_2, m1.group(2) )}
            if(m1.group(3)!=Port1_3.state.toString){
            postUpdate(Port1_3, m1.group(3) )}
            if(m1.group(4)!=Port1_4.state.toString){
            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)))
        }
            if (m2.matches()) {
            if(m2.group(1)!=Port2_1.state.toString){
            postUpdate(Port2_1, m2.group(1) )}
            if(m2.group(2)!=Port2_2.state.toString){
            postUpdate(Port2_2, m2.group(2) )}
            if(m2.group(3)!=Port2_3.state.toString){
            postUpdate(Port2_3, m2.group(3) )}
            if(m2.group(4)!=Port2_4.state.toString){
            postUpdate(Port2_4, m2.group(4) )}
            postUpdate(Port2_1c,    Integer::parseInt(m2.group(5)))
            postUpdate(Port2_2c,    Integer::parseInt(m2.group(6)))
            postUpdate(Port2_3c,    Integer::parseInt(m2.group(7)))
            postUpdate(Port2_4c,    Integer::parseInt(m2.group(8)))
        }
            postUpdate(Measure_Power_Liv,(Port1_1c.state as DecimalType) + (Port1_2c.state as DecimalType) + (Port1_3c.state as DecimalType) + (Port1_4c.state as DecimalType) + (Port2_1c.state as DecimalType) + (Port2_2c.state as DecimalType) + (Port2_3c.state as DecimalType) + (Port2_4c.state as DecimalType))

    Kommentar


      #17
      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 Automatisierung eignen sich die NETIO4ALL leider nur bedingt. Das System ist closed-source was einen ziemlich vom Hersteller abhängig macht. Die LUA-Unterstützung ist leider nur rudimentär - output von Informationen via CGI wird in keinster Weise unterstützt. Des Weiteren ist die KShell ein Witz, es lassen sich nur die Sockets schalten und das auch nur via Telnet (Sicherheit lässt grüßen).

      Wenn Du irgendwelche Infos aus dem Gerät rausholen willst gibt es nur workarounds oder unsaubere Frickelleien.

      Ich hatte nur folgende Möglichkeiten gefunden Informationen aus dem Teil rauszuholen:

      1.
      Die benötigten Schaltzustände oder Verbrauchsmessungen kompliziert aus dem Web-Interface rausfriemeln - ist alles andere als schön. Sollte sich an dem Interface was ändern musst Du das ebenfalls auf Serverseite anpassen.

      Des Weiteren ist mir aktuell nicht bekannt ob die automatisierte Authentifizierung möglich ist bei dem Webinterface. Ausserdem handelt es sich hierbei um kein Standard-Datenformat wie XML, JSON o.ä.

      2.
      per CGI-Request ein LUA-Script triggern was widerum eine neue Verbindung aufbaut und die Information via HTTP-Request an den Server sendet. Unschön an der Sache ist der ganze Overhead / die Ressourcen verschwendung der/die durch die doppelte Connection entsteht.

      Des Weiteren muss auf Serverseite ein Script hinterlegt werden was die Daten entgegen nimmt und entsprechend weiter verarbeitet. Das erhöht den Pflegeaufwand - ich triggere also ein Script was ein neues Script triggert... xD

      Wenn der ganze Smart-Home Krempel in ein eigenes VLAN eingesperrt und der traffic stark begrenzt bzw. kontrolliert werden soll ist das auch schon wieder eine potentielle Sicherheitslücke die sich eigentlich vermeiden liesse...

      Hab meine 3 Leisten wieder zurück zu rei**elt geschickt weil sie ohne die Möglichkeit Output via CGI zu erhalten nutzlos sind. Imho möchte man bei so einem Thema nicht frickeln oder basteln und hoffen das sich nichts ändert und es plötzlich nicht mehr funktioniert.

      Kommentar

      Lädt...
      X