Datenvisualisierung mit Clouddiensten

User stellen ihre Haussteuerung vor

Moderator: Co-Administratoren

rewe0815
Beiträge: 176
Registriert: 30.09.2010, 09:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Datenvisualisierung mit Clouddiensten

Beitrag von rewe0815 » 22.08.2012, 18:39

Die CCU bringt leider keine Möglichkeit zur Visualisierung von Langzeitdaten (Wetterdaten etc.) mit. Es gibt die verschiedensten Möglichkeiten mit externen Tools eine Visualisierung zu erreichen (Temperaturlogging aus USB, CCU Historian, IP-Symcon uva.)

Bisher habe ich mit USB Logging gearbeitet und mir die Daten hin und wieder aufbereitet. Das ist mir aber auf die Dauer zu aufwendig und nützt mir auch nichts, wenn ich längere Zeit abwesend bin.
Varianten mit externer Software habe bisher nicht eingesetzt, weil bei den gängigen Lösungen ein 7/24 Rechner/Server + externe Software nötig sind. Und genau das will ich vermeiden.

Ich habe mich deshalb nach Clouddiensten umgesehen, die man evtl. für diesen Zweck einsetzen kann.

Dabei sollten folgende Kriterien erfüllt sein:

Kostenfrei
Einfache direkte Anbindung der CCU per Schnittstelle, die mit Boardmitteln möglich sind.
Ansprechendes, flexibles Äußeres

Prinzipiell bin ich bisher bei 3 Diensten fündig geworden, die man einsetzen könnte, wobei ich einen Dienst in die CCU integriert habe.
Der Dienst, den ich implementiert habe ist http://www.exosite.com

Hier mal eine Blick auf mein Portal, was ich mir dort eingerichtet habe.
Exosite Portals-1-2.jpg
Bild 1: Mein Portal
Warum exisite.com ?

- Exosite bietet neben kostenpflichtiger Nutzung auch eine freie eingeschränkte Nutzung, die für meine Zwecke ausreichend ist
- Exosite bietet sehr einfache APIs, die die Implementation in die CCU recht einfach gemacht haben. Neben HTTP ist auch HTTPS möglich.
- Eine eigene Seite (Portal-Seite) ist sehr schnell eingerichtet und schaut recht ansprechend aus (find ich jedenfalls)
Auf der Seite werden vorgefertigte Wigets plaziert, die die eigentlichen daten visualisieren. Hier sind neben Standardvorlagen auch Custom Vorlagen möglich, die z.B. die Daten mittels der Google-API visualisieren.
- Es sind Mail(SMS) Events möglich (die ich i.M. aber nicht nutze)

Ich habe die Seite inzwischen seit ca. 4 Wochen angebunden und konnte keine Probleme feststellen.

Wie gehts?

Achtung! Ich bringe hier keine Lösung, die sich 1:1 übernehmen läßt. Vielmehr soll diese Beispielimpementation als Vorlage für eigene Implementaionen dienen.

1. Bei exosite.com registrieren
2. Nach erfolgreicher Registrierung landet man nach dem Login immer auf seiner Portalseite. Die vorhandenen Widgets auf dem eigenen Portal kann man dann erstmal alle löschen.
3. Dann richtet man sich am Besten erst einmal ein DEVICES ein. Ein DEVICES bzw. die innerhalb des DEVICES angelegten DATAs können dann in den unterschiedlichsten Widgets visualisiert werden. Über die Organisation seiner Devices sollte man sich etwas Gedanken machen. In der freien Variante sind (glaub ich) max. 2 Devices mit je 3 Datenquellen (DATA) möglich. 
Man könnte z.B. einen Raum als ein Device definieren und darin Temperatur und Feuchtigkeit darstellen, die dann in einem Widget visualisiert werden können.
Ich habe aber statt dessen ein Temperatur-DEVICE und ein Feuchte-DEVICE angelegt. So kann ich die Kurven 3er Räume jeweils in einen Temperatur-/Feuchtediagramm visualisieren.

Mitteilungszentrale-1-1.jpg
Bild 2: Temperaturdevice
Wichtig ist der CIK Schlüssel, den man sich kopieren muss, weil der innerhalb der API benötigt wird!

Der dargestellte CIK funktioniert inzwischen natürlich nicht mehr ;-) Das war nur ein Testdevice.

4. Nun legt man seine Datenquellen für die jeweiligen Devices an

Snowtape-3.jpg
Bild 3: Datenquelle
5. Widget zufügen. Für den Anfang empfehle ich den Line Graph Type, da hat man schon die klassische graphische Darstellung des Temperaturverlaufes.
könnte dann ungefähr so aussehen:
Exosite Portals-3-1.jpg
Bild 4: Add Widget

Ok, soweit ist erstmal alles eingerichtet, was man für erste Tests benötigt.

Wie kommen nun die Daten rein?

Dazu muss man eine der angeboteten APIs bemühen. Hier findet man alle nötigen Infos:

http://exosite.com/products/onep/documentation?cid=517

Ich habe mich für das einfache HTTP - Interface entschieden, dass gleichermaßen HTTP uns HTTPS unterstützt. Dabei wird über ein simples HTTP-POST kommuniziert.

Um mal gleich ein Erfolgserlebnis zu haben kann man das Ganze im Terminal (Win/Mac/Linux sollte egal sein) mit WGET testen:

Code: Alles auswählen

wget    --header='Content-Type: application/x-www-form-urlencoded; charset=utf-8' \
 	  --header='X-Exosite-CIK: hier_muss_die_CIK_Ihres_Decvie_rein'\
 	  --header='Content-Length: 11' \
 	  --post-data 'WTemp=24.44'  \
 	  --timeout=10 \
           http://m2.exosite.com/api:v1/stack/alias
Der obige Befehl sendet den Wert: 24,44 an die Datenquelle WTemp ihres Devices, welches mit der obigen CIK adressiert wird.
Wenn alles geklappt hat, sollte der erste Punkt im Widget ihrer Portalseite auftauchen.
Natürlich kann auch CURL benutzt werden, damit sollte dann auch HTTPS klappen.

Ein Programm auf der CCU braucht eigentlich nur noch den Content-String (im Beispiel „WTemp=24.4“) aufbereiten und dann den WGET per SYSTEM

Zur Aufbereitung des Content-String benutze ich das allseits bekannte Script zum Wetterlogging auf USB, was bei mir sowieso zur Langzeitspeicherung mitläuft.

Da werden die interessierenden Wettersensoren rausgefiltert:

Achtung nur Programmauszug!

Code: Alles auswählen

if (vDevice == "WZKlima")
       	   {
       	   exTemp = exTemp + "&" + "HTemp=" + vIstWert;
       	   exFeuchte = exFeuchte + "&" + "HHum=" + vFeuchte;
       	   }  
So werden dann die entsprechenden Strings gebildet und letztlich ein TCL-Script aufgerufen:

Code: Alles auswählen

  ! evtl & an der 1.Stelle entfernen
  if (exTemp.Length() >1) 
     {
        exTemp = exTemp.Substr(1);
     }
  if (exFeuchte.Length() >1) 
     {
        exFeuchte = exFeuchte.Substr(1);
     }
  
  exTemp = '"'+exTemp+'"';
  exFeuchte = '"'+exFeuchte+'"';
 
  ! an Exosite senden
  system.Exec("tclsh /etc/config/sendexosite.tcl " + exTemp +" "+exFeuchte ,&out, &err);           


Hier könnte eigentlich gleich mit WGET gearbeitet werden. Ein kleines TCL-Schript ist da aber für mich flexibler:

Code: Alles auswählen

# Aufruf tclsh sendexosite.tcl <SenddataTempTemperatur> <SenddataTempLuftfeuchte>
#        tclsh sendexosite.tcl "WTemp=31" "WHum=55"
#        tclsh sendexosite.tcl "GTemp=13.30&WTemp=18.60&HTemp=21.40" "GHum=95&WHum=61&HHum=61"
#

# http Package wird gebraucht 
package require http 2

proc sendexo {url CIK Content} {
	# Header aufbereiten
	# -header besteht aus einer Liste vom Header-Paaren {"Content-Type" "application/x-www-form-urlencoded; charset=utf-8"} 
	#                                            wird zu "Content-Type: application/x-www-form-urlencoded; charset=utf-8"
	#  Als letzte Headerzeile steht "Content-Length: <Anzahl der in dataTemp übergebenen Zeichen>"
	#
	# set head [concat {"Content-Type" "application/x-www-form-urlencoded; charset=utf-8" "X-Exosite-CIK" "0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1" "Content-Length"} [format %u [string length $Content]]]
    
    # setzte den Returncode auf -1 (default)
    set returnCode -1
	set head [list "Content-Type" "application/x-www-form-urlencoded; charset=utf-8" "X-Exosite-CIK" $CIK "Content-Length" [format %u [string length $Content]]]

	catch { 
    	# Übertragung 
	    set tok [http::geturl $url -query $Content -headers $head -type text/xml -channel stdout]
	    
    	# ab HTTP package 2.5 gibt es dass Commando ncode, dass direkt den ReturnCode zurückgibt
    	# puts [http::ncode $tok] 
    	#   muss lauten:
    	#   204
    	# set returnCode [http::ncode $tok]
    	
    	# HM hat das HTTP package V2.2 installiert, da gibt es noch kein ncode, hier kann der ReturnCode aus dem HTTP-Returnstring extrahiert werden
    	# Standard Return ist:
    	#
    	#     HTTP/1.1 204 No Content
    	#
    	#
    	# Der Returncode ist dann das 2. Listelement
    	set returnCode [lindex [split [http::code $tok]] 1]
    	# puts $returnCode
    	
    	# löscht das array tok
    	http::cleanup $tok
	}
	return $returnCode
}

# exosite url
set url "http://m2.exosite.com/api:v1/stack/alias"

#-----------------------------------------------------------------------
# Temperatur DEVICE bedienen (returnCode wird derzeit nicht ausgewertet)
# Content Temperatur wird als 1. Parameter übernommem
set Content [lindex $argv 0]

# Temperatur CIK
set CIK "Hier_die_CIK_FÜR_DAS Temperatur_DEVICE_rein"

set ret [sendexo $url $CIK $Content]
#puts "ReturnCode: $ret"

#----------------------------------------------------------------------
# Feuchte DEVICE bedienen (returnCode wird derzeit nicht ausgewertet)
# Feuchte wird als 2. Parameter übernommem
set Content [lindex $argv 1]

# Feuchte CIK
set CIK "Hier_die_CIK_FÜR_DAS Feuchte_DEVICE_rein"

set ret [sendexo $url $CIK $Content]
#puts "ReturnCode: $ret"
Ok, das war es.
Ich bin jetzt nicht so der große TCL Hacker, da gibt es bestimmt noch einiges zu verbessern.
Vielleicht greift jemand die Idee auf und das Ganze entwickelt sich noch etwas:

Folgende Dinge kann ich mir noch vorstellen:

- Umstellung auf HTTPS (hab ich in TCL aber keine Erfahrung)
- Auswertung ReturnCode und bei Fehler ein Eintrag ins Syslog oder gar eine Mail.

rewe0815
Dateianhänge
Ohne Titel.jpg
Bild 5: Widget

PumpkinEater
Beiträge: 142
Registriert: 16.12.2007, 12:40

Re: Datenvisualisierung mit Clouddiensten

Beitrag von PumpkinEater » 23.08.2012, 08:07

Sehr Interessant - danke für die ausführliche Beschreibung. Auch wenn ich selbst alles in meine eigene MySQL-Datenbank speichere, ist dies sicherlich eine gute Lösung, wenn man keinen 24/7-Server laufen lassen will.
Gruß
Peter

KolkF
Beiträge: 88
Registriert: 25.08.2012, 20:41
Hat sich bedankt: 1 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von KolkF » 26.08.2012, 11:22

Hallo,

ich habe versucht dein Projekt nachzubauen, da ich bisher nichts mit tcl gemacht habe wollte ich den wget direkt per system.Exec einbinden, dies scheint aber nicht zu funktionieren, der wget gibt mit auf der Konsole folgende Rückmeldung:

Code: Alles auswählen

~ # wget    --header='Content-Type: application/x-www-form-urlencoded; charset=utf-8'  --header='X-Exosite-CIK: blubb'      --header='Content-Length: 11'      --post-data 'ATemp= 22.2'  --timeout=10 http://m2.exosite.com/api:v1/stack/alias
wget: unrecognized option `--post-data'
Mit dem wget unter ubuntu klappt es mit identischem Code.
Kann der wget in der CCU diese option nicht oder muss ich den Wget noch pimpen?

Viele Grüße
Felix

rewe0815
Beiträge: 176
Registriert: 30.09.2010, 09:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von rewe0815 » 26.08.2012, 12:44

Stimmt,

ein Aufruf von wget per telnet bringt:

Code: Alles auswählen

BusyBox v1.00 (2012.05.14-12:29+0000) multi-call binary

Usage: wget [-c|--continue] [-q|--quiet] [-O|--output-document file]
                [--header 'header: value'] [-Y|--proxy on/off] [-P DIR] url

wget retrieves files via HTTP or FTP
Da gibt es kein POST. Vlt kannst du cURL verwenden, wie das implementiert werden kann, hab ich mal irgendwo hier im Forum gelesen. Damit sollte dann theoretisch auch HTTPS möglich sein.
Ansonsten, keine Scheu, vor TCL, da sollte sich meine Routine leicht anpassen lassen.
Du must halt dass TCL Script zur HM kopieren (bei mir /etc/config/sendexosite.tcl) und mit:

Code: Alles auswählen

chmod +X /etc/config/sendexosite.tcl
ausführbar machen.

Dann kannst Du es in Deinem Falle z.B. so aufrufen:

Code: Alles auswählen

  
string exTemp;
exTemp="ATemp=22.2";
string out;
string err;
system.Exec("tclsh /etc/config/sendexosite.tcl " + exTemp ,&out, &err);
rewe0815

KolkF
Beiträge: 88
Registriert: 25.08.2012, 20:41
Hat sich bedankt: 1 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von KolkF » 26.08.2012, 20:56

Dankeschön,

hatte gehofft die Verwendung von Code den ich gar nicht verstehe weitgehend vermeiden zu können.
Aber ok, nun läuft es. Musse nur noch kurz den FTP draufbringen.
Exosite erlaubt bei mir übrigens 20 Werte pro Device.

Viele Dank, mal schauen was für weitere Sachen sich da noch anzeigen lassen.

Grüße
Felix

rewe0815
Beiträge: 176
Registriert: 30.09.2010, 09:40
Hat sich bedankt: 1 Mal
Danksagung erhalten: 3 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von rewe0815 » 26.08.2012, 22:00

Na also;-)

Falls Du mein TCL Programm nur für das eine Device verwendest, solltest Du es etwas anpassen. Etwa so:

Code: Alles auswählen

# Aufruf tclsh sendexosite.tcl <SenddataTempTemperatur> 
#        tclsh sendexosite.tcl "WTemp=31" 
#        tclsh sendexosite.tcl "GTemp=13.30&WTemp=18.60&HTemp=21.40" 

# http Package wird gebraucht 
package require http 2

proc sendexo {url CIK Content} {   
    # setzte den Returncode auf -1 (default)
    set returnCode -1
   set head [list "Content-Type" "application/x-www-form-urlencoded; charset=utf-8" "X-Exosite-CIK" $CIK "Content-Length" [format %u [string length $Content]]]

   catch { 
       # Übertragung 
       set tok [http::geturl $url -query $Content -headers $head -type text/xml -channel stdout]
       
       # ab HTTP package 2.5 gibt es dass Commando ncode, dass direkt den ReturnCode zurückgibt
       # puts [http::ncode $tok] 
       #   muss lauten:
       #   204
       # set returnCode [http::ncode $tok]
       
       # HM hat das HTTP package V2.2 installiert, da gibt es noch kein ncode, hier kann der ReturnCode aus dem HTTP-Returnstring extrahiert werden
       # Standard Return ist:
       #
       #     HTTP/1.1 204 No Content
       #
       #
       # Der Returncode ist dann das 2. Listelement
       set returnCode [lindex [split [http::code $tok]] 1]
       # puts $returnCode
       
       # löscht das array tok
       http::cleanup $tok
   }
   return $returnCode
}

# exosite url
set url "http://m2.exosite.com/api:v1/stack/alias"

#-----------------------------------------------------------------------
# Temperatur DEVICE bedienen (returnCode wird derzeit nicht ausgewertet)
# Content Temperatur wird als 1. Parameter übernommem
set Content [lindex $argv 0]

# Temperatur CIK
set CIK "Hier_die_CIK_FÜR_DAS Temperatur_DEVICE_rein"

set ret [sendexo $url $CIK $Content]
#puts "ReturnCode: $ret"
Da ich im Moment nicht dazu komme, selber daran weiter zu basteln, bin ich für jeden Tipp dankbar, was sich da noch machen läßt.

rewe0815

KolkF
Beiträge: 88
Registriert: 25.08.2012, 20:41
Hat sich bedankt: 1 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von KolkF » 27.08.2012, 20:31

Hallo mal wieder,

Hilfe !!!
bis heute morgen 2:05 sah alles ganz ok aus, zugegeben es wurden zeitweise 0,0°C an das Portal übertragen aber ok...

Seit 2:05 ging gar nichts mehr. Ich habe dann versucht in den routinen zur Bildung des Wertes für die Lufttemperatur noch etwas anzupassen und es lief wieder eine weile.
Seit heute nachmittag habe ich das Problem das ich wenn ich in der WebUI das Script bearbeite mir die Fehlerkontrolle keine Rückmeldung mehr gibt. Wenn ich dann das Script schliesse und das Programm mit OK bestätigen will hängt sich anscheinend die WebUI auf.
Es friert dann ein und ein neuer zugriff geht nicht, es bleibt dann nur der reboot per SSH
zugriff per ssh und FTP geht noch.

Die messages sagt:

Code: Alles auswählen

May 31 12:51:01 (none) syslog.info syslogd started: BusyBox v1.00 (2012.05.14-12:29+0000)
May 31 12:51:02 (none) user.debug setclock: Try to get time from ntp.homematic.com
Aug 27 13:39:26 (none) user.debug setclock: Mon Aug 27 13:39:26 CEST 2012
Aug 27 13:39:27 (none) user.info firewall: configuration set
Aug 27 13:39:31 (none) local0.info udhcpd[951]: udhcpd (v0.9.9-pre) started
Aug 27 13:39:31 (none) cron.notice crond[965]: crond 2.3.2 dillon, started, log level 8 
Aug 27 13:39:33 (none) user.info : hss_lcd: Programm initialisiert. Starte Hauptschleife.
Aug 27 13:39:43 (none) authpriv.info dropbear[1028]: Running in background
Aug 27 13:39:44 (none) user.info homematic: started ftp server
Aug 27 13:39:44 (none) user.info homematic: HomeMatic 1.506 has been started
Aug 27 13:39:44 (none) daemon.info init: ^MStarting pid 1047, console /dev/ttyS0: '/sbin/getty'
Aug 27 13:40:13 (none) user.err rfd: HSSParameter::GetValue() id=RAINING failed getting physical value.
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallXmlrpcMethod: execute result isFault; method =getValue Params = {"IEQ0504908:1","RAINING"} result= [faultCode:-1,faultString:"Failure"] [../Platform/DOM/iseXmlRpc.cpp (2557)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallGetValue: CallXmlrpcMethod failed [../Platform/DOM/iseXmlRpc.cpp (1377)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseHssDP::ReadValue: CallGetValue failed; sVal = 0 [../Platform/DOM/iseDOMdpHSS.cpp (130)]
Aug 27 13:40:13 (none) user.err rfd: HSSParameter::GetValue() id=WIND_SPEED failed getting physical value.
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallXmlrpcMethod: execute result isFault; method =getValue Params = {"IEQ0504908:1","WIND_SPEED"} result= [faultCode:-1,faultString:"Failure"] [../Platform/DOM/iseXmlRpc.cpp (2557)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallGetValue: CallXmlrpcMethod failed [../Platform/DOM/iseXmlRpc.cpp (1377)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseHssDP::ReadValue: CallGetValue failed; sVal = 0.000000 [../Platform/DOM/iseDOMdpHSS.cpp (130)]
Aug 27 13:40:13 (none) user.err rfd: HSSParameter::GetValue() id=TEMPERATURE failed getting physical value.
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallXmlrpcMethod: execute result isFault; method =getValue Params = {"IEQ0504908:1","TEMPERATURE"} result= [faultCode:-1,faultString:"Failure"] [../Platform/DOM/iseXmlRpc.cpp (2557)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallGetValue: CallXmlrpcMethod failed [../Platform/DOM/iseXmlRpc.cpp (1377)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseHssDP::ReadValue: CallGetValue failed; sVal = 0.000000 [../Platform/DOM/iseDOMdpHSS.cpp (130)]
Aug 27 13:40:13 (none) user.err rfd: HSSParameter::GetValue() id=RAIN_COUNTER failed getting physical value.
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallXmlrpcMethod: execute result isFault; method =getValue Params = {"IEQ0504908:1","RAIN_COUNTER"} result= [faultCode:-1,faultString:"Failure"] [../Platform/DOM/iseXmlRpc.cpp (2557)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseXmlRpc::CallGetValue: CallXmlrpcMethod failed [../Platform/DOM/iseXmlRpc.cpp (1377)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseHssDP::ReadValue: CallGetValue failed; sVal = 0.000000 [../Platform/DOM/iseDOMdpHSS.cpp (130)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 3 col 42 near ^$src$);             if( src_dp.Type() == 393281 ) {               object rule=pr^M  [../Platform/DOM/iseESP.cpp (1067)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: ParseProgram: SyntaxError= $src$);             if( src_dp.Type() == 393281 ) {               object rule=prg.Rule();               object cond=rule.RuleCondition(0);               object dest=rule.RuleDestination();               object dp_yesterday=dom.GetObject(dest.DestSingleDestination(0).DestinationDP());               object dp_today=dom.GetObject(dest.DestSingleDestination(1).DestinationDP());               if ( src_dp.LastTimestamp() ) {                 var diff=src_dp.Value()-src_dp.LastValue();                 if ( diff < 0.0 ) {                   diff = diff + src_dp.ValueMax();                 }                 dp_today.State(dp_today.Value() + diff);               } else {                 dp_today.State(0.0);                 dp_yesterday.State(0.0);               }             }          [../Platform/DOM/iseESP.cpp (348)]
Aug 27 13:40:13 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 0 0x00 [1] 0 0x00 [2] 0 0x00 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 13:45:01 (none) cron.notice crond[965]: USER root pid 1086 cmd /bin/arm7setclock 
Aug 27 13:59:21 (none) syslog.info -- MARK --
Aug 27 14:00:01 (none) cron.notice crond[965]: USER root pid 1109 cmd /bin/arm7setclock 
Aug 27 14:15:01 (none) cron.notice crond[965]: USER root pid 1132 cmd /bin/arm7setclock 
Aug 27 14:19:21 (none) syslog.info -- MARK --
Aug 27 14:30:01 (none) cron.notice crond[965]: USER root pid 1157 cmd /bin/arm7setclock 
Aug 27 14:39:21 (none) syslog.info -- MARK --
Aug 27 14:45:01 (none) cron.notice crond[965]: USER root pid 1182 cmd /bin/arm7setclock 
Aug 27 14:59:22 (none) syslog.info -- MARK --
Aug 27 14:59:27 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:00:01 (none) cron.notice crond[965]: USER root pid 1226 cmd /bin/arm7setclock 
Aug 27 15:01:24 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 97 0x61 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:07:47 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:08:39 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:08:49 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:09:42 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:10:05 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:10:42 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:11:05 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 97 0x61 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:11:15 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:11:45 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 99 0x63 [1] 0 0x00 [2] 100 0x64 [3] 0 0x00 [4] 92 0x5c  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:12:10 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 99 0x63 [1] 0 0x00 [2] 100 0x64 [3] 0 0x00 [4] 92 0x5c  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:12:26 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 99 0x63 [1] 0 0x00 [2] 100 0x64 [3] 0 0x00 [4] 92 0x5c  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:12:52 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 99 0x63 [1] 0 0x00 [2] 100 0x64 [3] 0 0x00 [4] 92 0x5c  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:13:40 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:14:01 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:14:04 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:14:09 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:15:02 (none) cron.notice crond[965]: USER root pid 1492 cmd /bin/arm7setclock 
Aug 27 15:19:20 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 145 0x91 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:19:22 (none) syslog.info -- MARK --
Aug 27 15:19:30 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 144 0x90 [1] 0 0x00 [2] 114 0x72 [3] 0 0x00 [4] 99 0x63  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 15:20:23 (none) local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 9 col 22 near ^.Value(); WriteLine("2"); WriteLine(Temp);^M  [../Platform/DOM/iseESP.cpp (1067)]
Aug 27 15:20:23 (none) local0.err ReGaHss: Error: ParseProgram: SyntaxError= .Value(); WriteLine("2"); WriteLine(Temp); [../Platform/DOM/iseESP.cpp (348)]
Aug 27 15:20:32 (none) local0.err ReGaHss: Error: IseESP::SyntaxError= Error 1 at row 9 col 22 near ^.Value(); WriteLine("2"); WriteLine(Temp);^M  [../Platform/DOM/iseESP.cpp (1067)]
Aug 27 15:20:32 (none) local0.err ReGaHss: Error: ParseProgram: SyntaxError= .Value(); WriteLine("2"); WriteLine(Temp); [../Platform/DOM/iseESP.cpp (348)]
Aug 27 15:30:01 (none) cron.notice crond[965]: USER root pid 1655 cmd /bin/arm7setclock 
Aug 27 15:39:22 (none) syslog.info -- MARK --
Aug 27 15:45:01 (none) cron.notice crond[965]: USER root pid 1663 cmd /bin/arm7setclock 
Aug 27 15:59:22 (none) syslog.info -- MARK --
Aug 27 16:00:01 (none) cron.notice crond[965]: USER root pid 1670 cmd /bin/arm7setclock 
Aug 27 16:15:01 (none) cron.notice crond[965]: USER root pid 1678 cmd /bin/arm7setclock 
Aug 27 16:19:22 (none) syslog.info -- MARK --
Aug 27 16:30:01 (none) cron.notice crond[965]: USER root pid 1686 cmd /bin/arm7setclock 
Aug 27 16:39:22 (none) syslog.info -- MARK --
Aug 27 16:45:01 (none) cron.notice crond[965]: USER root pid 1696 cmd /bin/arm7setclock 
Aug 27 16:59:22 (none) syslog.info -- MARK --
Aug 27 17:00:01 (none) cron.notice crond[965]: USER root pid 1710 cmd /bin/arm7setclock 
Aug 27 17:15:01 (none) cron.notice crond[965]: USER root pid 1722 cmd /bin/arm7setclock 
Aug 27 17:19:22 (none) syslog.info -- MARK --
Aug 27 17:30:01 (none) cron.notice crond[965]: USER root pid 1730 cmd /bin/arm7setclock 
Aug 27 17:39:22 (none) syslog.info -- MARK --
Aug 27 17:45:01 (none) cron.notice crond[965]: USER root pid 1744 cmd /bin/arm7setclock 
Aug 27 17:59:22 (none) syslog.info -- MARK --
Aug 27 18:00:01 (none) cron.notice crond[965]: USER root pid 1754 cmd /bin/arm7setclock 
Aug 27 18:05:11 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 18:05:36 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 97 0x61 [1] 0 0x00 [2] 99 0x63 [3] 0 0x00 [4] 100 0x64  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 18:05:46 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 18:06:29 (none) local0.err ReGaHss: Error: IseESP::ExecError= Execution failed: [-1] 0 0x00 [0] 9 0x09 [1] 0 0x00 [2] 64 0x40 [3] 0 0x00 [4] 0 0x00  [../Platform/DOM/iseESPexec.cpp (11622)]
Aug 27 18:12:00 (none) local0.emerg ReGaHss: Crash: Could not spawn a new request handler! {"HTTP-Listener"} [../Platform/Internet/http/httpListener.cpp (175)]
Aug 27 18:13:46 (none) local0.emerg ReGaHss: Crash: Could not spawn a new request handler! {"HTTP-Listener"} [../Platform/Internet/http/httpListener.cpp (175)]
Aug 27 18:15:01 (none) cron.notice crond[965]: USER root pid 1890 cmd /bin/arm7setclock 
Aug 27 18:15:31 (none) local0.emerg ReGaHss: Crash: Could not spawn a new request handler! {"HTTP-Listener"} [../Platform/Internet/http/httpListener.cpp (175)]
Aug 27 18:19:22 (none) syslog.info -- MARK --
Aug 27 18:30:01 (none) cron.notice crond[965]: USER root pid 1902 cmd /bin/arm7setclock 
Aug 27 18:39:22 (none) syslog.info -- MARK --
Aug 27 18:45:01 (none) cron.notice crond[965]: USER root pid 1914 cmd /bin/arm7setclock 
Aug 27 18:59:22 (none) syslog.info -- MARK --
Aug 27 19:00:01 (none) cron.notice crond[965]: USER root pid 1921 cmd /bin/arm7setclock 
Aug 27 19:15:01 (none) cron.notice crond[965]: USER root pid 1933 cmd /bin/arm7setclock 
Aug 27 19:19:22 (none) syslog.info -- MARK --
Aug 27 19:30:01 (none) cron.notice crond[965]: USER root pid 1947 cmd /bin/arm7setclock 
Aug 27 19:39:22 (none) syslog.info -- MARK --
Aug 27 19:45:01 (none) cron.notice crond[965]: USER root pid 1955 cmd /bin/arm7setclock 
Exosite sagt:

Code: Alles auswählen

14:55:03 Aug 27, 12 Europe/Amsterdam	22.3
	14:50:02 Aug 27, 12 Europe/Amsterdam	21.9
	14:45:03 Aug 27, 12 Europe/Amsterdam	0
	14:40:02 Aug 27, 12 Europe/Amsterdam	22.5
	14:35:02 Aug 27, 12 Europe/Amsterdam	0
	14:30:02 Aug 27, 12 Europe/Amsterdam	21.8
	14:25:02 Aug 27, 12 Europe/Amsterdam	0
	14:20:02 Aug 27, 12 Europe/Amsterdam	21.6
	14:15:02 Aug 27, 12 Europe/Amsterdam	0
	14:10:02 Aug 27, 12 Europe/Amsterdam	21.8
	14:05:02 Aug 27, 12 Europe/Amsterdam	0
	14:00:03 Aug 27, 12 Europe/Amsterdam	22.3
	13:55:03 Aug 27, 12 Europe/Amsterdam	0
	13:50:03 Aug 27, 12 Europe/Amsterdam	22.1
	13:45:02 Aug 27, 12 Europe/Amsterdam	0
	13:40:15 Aug 27, 12 Europe/Amsterdam	15.7
	02:05:00 Aug 27, 12 Europe/Amsterdam	0
	02:00:00 Aug 27, 12 Europe/Amsterdam	15.7
	01:55:01 Aug 27, 12 Europe/Amsterdam	0
	01:50:01 Aug 27, 12 Europe/Amsterdam	15.8
	01:45:01 Aug 27, 12 Europe/Amsterdam	0
	01:40:01 Aug 27, 12 Europe/Amsterdam	15.8
	01:35:01 Aug 27, 12 Europe/Amsterdam	0
	01:30:01 Aug 27, 12 Europe/Amsterdam	15.8
	01:25:01 Aug 27, 12 Europe/Amsterdam	0
	01:20:00 Aug 27, 12 Europe/Amsterdam	15.8
	01:15:00 Aug 27, 12 Europe/Amsterdam	0
	01:10:00 Aug 27, 12 Europe/Amsterdam	0
	01:05:00 Aug 27, 12 Europe/Amsterdam	0
	01:00:00 Aug 27, 12 Europe/Amsterdam	0
	00:55:00 Aug 27, 12 Europe/Amsterdam	0
	00:50:01 Aug 27, 12 Europe/Amsterdam	15.8
	00:45:01 Aug 27, 12 Europe/Amsterdam	0
	00:40:01 Aug 27, 12 Europe/Amsterdam	0
	00:35:01 Aug 27, 12 Europe/Amsterdam	0
	00:30:01 Aug 27, 12 Europe/Amsterdam	0
	00:25:01 Aug 27, 12 Europe/Amsterdam	0
	00:20:01 Aug 27, 12 Europe/Amsterdam	0
	00:15:00 Aug 27, 12 Europe/Amsterdam	16
	00:10:00 Aug 27, 12 Europe/Amsterdam	16
	00:05:00 Aug 27, 12 Europe/Amsterdam	16
	00:00:00 Aug 27, 12 Europe/Amsterdam	16
	23:55:01 Aug 26, 12 Europe/Amsterdam	16.1
	23:50:01 Aug 26, 12 Europe/Amsterdam	16.1
	23:45:01 Aug 26, 12 Europe/Amsterdam	16.1
	23:40:01 Aug 26, 12 Europe/Amsterdam	16.2
	23:35:01 Aug 26, 12 Europe/Amsterdam	16.2
	23:30:01 Aug 26, 12 Europe/Amsterdam	16.2
	23:25:01 Aug 26, 12 Europe/Amsterdam	16.3
habt Ihr eine Idee was da nicht passen könnte?
Ich habe leider gestern ziemlich viel rumgeschraubt (ssh/ftp/ tcl script...)

welches mache ich als erstes Rückgängig ??

Wenn es nicht ganz hier hinpasst bitte verschieben..


Viele Grüße
Felix

KolkF
Beiträge: 88
Registriert: 25.08.2012, 20:41
Hat sich bedankt: 1 Mal

Re: Datenvisualisierung mit Clouddiensten

Beitrag von KolkF » 28.08.2012, 11:03

Ich gebe ersteinmal Entwarnung.

Ich habe gestern noch eine meine "Optimierungen" aus meinem script zur Bildung der max/min Temperatur eliminiert.

Ich hatte das Beispielscript aus der Doku umgesetzt, hab mir dann aber überlegt das ich ja gar nicht bei jeder Aktualisierung des Wertes ein neues Max / min bilden müsste sondern mir das auch alle 2 Minuten reichen würde, also habe ich die Zusatzbedingung einer Zeitintervallsteuerung hinzugefügt.
Ich vermute nun das dies dazugeführt hat das das script mit einer ungültigen $src$ referenz gestartet wurde..
Ich habe nun die Zeitbedingung entfernt und es ist die Nacht über super gelaufen..
Auch die Übertragung von null als Wert ist nicht wieder vorgekommen.

Grüße
Felix

Benutzeravatar
Homie
Beiträge: 111
Registriert: 24.09.2012, 19:43

Re: Datenvisualisierung mit Clouddiensten

Beitrag von Homie » 25.09.2012, 20:11

@rewe0815: Danke für die Idee und die Anleitung. Ich denke das werde ich wohl mal probieren... Klingt auf jeden Fall sehr interessant.
CCU2 steuert 90 Kanäle in 62 Geräten

Benutzeravatar
micky1962
Beiträge: 44
Registriert: 07.09.2012, 14:53

Re: Datenvisualisierung mit Clouddiensten

Beitrag von micky1962 » 04.10.2012, 12:57

Hallo,

Ich logge seit einiger Zeit meine Thermometerdaten bei COSM.

Wer will, kann sich ja meinen feed mal anschauen: http://www.cosm.com/feeds/15444.
Die oberen 12 Kanäle kommen von den HM-Thermostaten, die unteren 4 von einem Selbsbauprojekt (mikrocontroller mit 4 DS1820. der seine Daten via xmlapi zur CCU sendet.)

Viele Grüße,
Michael
Gruß, Michael

Antworten

Zurück zu „Projektvorstellungen“