Selbstbauten, IRTrans, Vellemann K8055 / VM110, ALLNET Ethernet System:
ALLNET ALL3006, ALL3015, ALL3028, ALL3029, ALL3075, ALL3076, ALL4000, ALL4039
Moderator: Co-Administratoren
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 29.06.2013, 13:48
spaceduck hat geschrieben:Aber gern...
Anbei das Python Skript.
Hallo Spaceduck,
ich habe nun auch den OWL Intuition Gateway am laufen und würde mir gern den Verbrauch in Homeputer reinholen. Kann das Python Skript direkt auf der CCU laufen?
Hast Du jetzt schon positive Langzeiterfahrung gesammelt?
Gruß, Tobias.
-
spaceduck
- Beiträge: 447
- Registriert: 02.06.2010, 08:07
- Hat sich bedankt: 1 Mal
- Danksagung erhalten: 9 Mal
Beitrag
von spaceduck » 30.06.2013, 08:18
Hallo Tobias,
Der owl läuft stabil und die angezeigten Werte passen im Vergleich zum Hauptzähler.
Die CCU hat meines Wissens keinen Python interpreter an board, damit wird das Script auch nicht laufen. Mit Homeputer kenn ich mich nicht aus. Aber Python gibts auch für Windows und da der Homeputer ja einen 7/24 Win PC benötigt solltest Du das Script wohl da laufen lassen.
Allerdings gibt das Script die Werte cacti konform aus. Evtl. musst Du die Ausgabe anpassen. Wie Du Die Werte dann in Homeputer bringst, damit kann ich leider nicht helfen.
Jan
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 30.06.2013, 09:08
Hallo Jan,
Homeputer braucht zum Glück keinen 24/7 PC sondern es reicht eine CCU1 aus.
Hmm, mangels Servers müsste man irgendwie Dein Skript in ein TCL Skript umwandeln um die Werte dann über die CCU einlesen zu können. Da ich weder Python noch TCL Spreche, wird das ein schwieriges unterfangen.
Meine Werte passen jetzt zum Hauptzähler auf ~5% genau. Ich gebe allerdings vor, dass meine Netzspannung bei 265V liegen würde. Vorher (bei 230V Einstellung) waren die Werte immer reproduzierbar ~15% zu niedrig.
Weist Du eigentlich, was man auf der Owlintuition Webseite unter Einstellungen/Push eintragen kann/muss?
Gruß, Tobias.
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 01.07.2013, 19:47
Hallo Forum,
mein Lieblingsinformatiker war so freundlich und hat mir das Python Skript in TCL konvertiert:
Code: Alles auswählen
#!/bin/tclsh
# sample receive buffer:
# "<electricity id='443719000861'><signal rssi='-52' lqi='13'/><battery level='100%'/><chan id='0'><curr units='w'>209.00</curr><day units='wh'>2412.21</day></chan><chan id='1'><curr units='w'>32.00</curr><day units='wh'>527.07</day></chan><chan id='2'><curr units='w'>32.00</curr><day units='wh'>1505.04</day></chan></electricity>"
package require udp
# A multicast demo.
proc udpEvent {chan} {
set data [read $chan]
set peer [fconfigure $chan -peer]
puts "$peer [string length $data] '$data'"
regexp {(<chan id='0'><curr units='w'>)([0-9]*\.?[0-9]+)} $data all first second
puts "POWERCONSUMPTION: $second"
# Send acknowledge to OWL and exit
puts -nonewline $peer "ack"
if {[string match "QUIT*" $data]} {
close $chan
set ::forever 1
}
return
}
set group 224.192.32.19
set port 22600
set s [udp_open $port]
fconfigure $s -buffering none -blocking 0
fconfigure $s -mcastadd $group -remote [list $group $port]
fileevent $s readable [list udpEvent $s]
set ::forever 0
vwait ::forever
exit
Die Nummer 224.192.32.19 muss wahrscheinlich durch die IP meines OW-Gateways ersetzt werden!? Der Port ist immer gleich? Mit welchem Befehl kann ich denn die Powerconsumption nun in eine Systemvariable schreiben?
Danke und Gruß,
Tobias.
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 01.07.2013, 19:58
Nachtrag:
Das TCL Skript habe ich nun über Telnet versucht zu starten. Ich bekomme allerdings die folgenden Fehlermeldungen.
- tclerror.JPG (19.58 KiB) 5599 mal betrachtet
Kann jemand helfen?
Danke und Gruß, Tobias.
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 13.07.2013, 14:29
Hallo Forum,
ich kann nun Fortschritte vermelden:
Skript owl.tcl
Code: Alles auswählen
package require udp
load libudp1.0.8.so
load tclrega.so
proc udpEvent {chan} {
set data [read $chan]
set peer [fconfigure $chan -peer]
set second ""
set dayunits "0"
set dayunitsEUR "0.00"
set group [lindex [fconfigure $chan -remote] 0]
# puts "$peer ($group) [string length $data] '$data' {[fconfigure $chan]}"
# Debug - Print received packet
# puts $data
regexp {(<chan id='0'><curr units='w'>)([0-9]*\.?[0-9]+)} $data all first second
puts "Aktueller Verbrauch: $second"
regexp {(<day units='wh'>)([0-9]*\.?[0-9]+)} $data all first dayunits
set dayunitsEUR [expr $dayunits/1000*0.22]
puts "Gesamtverbrauch heute: $dayunits"
puts "Gesamtkosten heute: $dayunitsEUR"
# Set write value in CCU
set rega_cmd ""
append rega_cmd "var Strom0 = dom.GetObject('Aktueller_Stromverbrauch');"
append rega_cmd "var Strom1 = dom.GetObject('K_Strom_heute');"
append rega_cmd "Strom0.State('$second');"
append rega_cmd "Strom1.State('$dayunitsEUR');"
rega_script $rega_cmd
return
exit
}
set group1 224.192.32.19
set port 22600
set s [udp_open $port]
fconfigure $s -buffering none -blocking 0
fconfigure $s -mcastadd $group1 -remote [list $group1 $port]
fileevent $s readable [list udpEvent $s]
# Announce our presence and run
set ::forever 0
vwait ::forever
Ausgabe über telnet mit tclsh owl.tcl:
- Ergebnis.JPG (13.02 KiB) 5553 mal betrachtet
---und die passenden Systemvariablen:
- aktueller_Stromverbrauch.JPG (16.05 KiB) 5554 mal betrachtet
- k_Strom_heute.JPG (15.2 KiB) 5554 mal betrachtet
Die TCL-Datei würde einmal gestaret werden und liefe dann endlos weiter. Bin mir jetzt nicht sicher ob sich das mit CUxD Systemexec Ersatz verträgt...
So rufe ich das Skript über ein WebUI Programm auf:
Code: Alles auswählen
dom.GetObject("CUxD.CUX2801002:1.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801002:1.CMD_SETS").State("tclsh /usr/local/addons/owl/owl.tcl");
dom.GetObject("CUxD.CUX2801002:1.CMD_RETS").State();
Gruß, Tobias.
-
Tobias78
- Beiträge: 1464
- Registriert: 27.06.2010, 01:01
- Wohnort: Braunschweig
- Hat sich bedankt: 4 Mal
Beitrag
von Tobias78 » 19.07.2013, 22:23
So, nun funktioniert alles - sogar die Einbindung als "Zusatzsoftware". Aufruf per Skript war nicht zielführend.
Das lauffähige Ergebnis ist
hier dokumentiert.