Loxone und PicoC

Lange habe ich mich vor der Loxone Programmiersprache PicoC gedrückt. Da ich aber noch auf dem Plan hatte den SolarLog 200 (Photovoltaik-Überwachung) sowie die Alpha-InnoTec (Wärmepumpe) auszulesen, habe ich mich mit dem Thema beschäftigt.

Je nach Gerät fängt das Problem damit an, wie man an die Daten kommt bzw. diese aufbereitet. Das Auslesen mit der Loxone ist dann gar nicht mal mehr sooo schwer. Hier ein kleines HowTo wie ich das für die beiden Geräte gelöst habe.

SolarLog 200

Beim SolarLog habe ich mir zuerst gedacht, dass ich einfach die Tagesübersicht auslese. Alle interesannten Werte sind in der Tabelle aufgelistet. Eigentlich perfekt?!SolarLogChart

Da die Seite sehr groß ist und es dadurch zu einer dauerhaften Belastung (je nach Intervall) vom SolarLog und vom Loxone Miniserver kommt, musste ich weitersuchen. Dabei bin ich auf eine Info gestoßen, dass die Werte auch unformatiert auf speziellen Webseiten des SolarLog zur Verfügung stehen. So entsteht keine große Last und die Daten sind einfach auszulesen.

Beim öffnen von http://<IPAdresse SolarLog>/days.js?nocache erhält man folgende Werte zurück (Ich habe in spitzen Klammern die Beschriftung eingefügt)

da[dx++]="11.07.13|<Ertrag>;<Tages Peak Einspeiseleistung>"

Beim öffnen von http://<IPAdresse SolarLog>/min_cur.js?nocache erhält man folgende Werte zurück (Ich habe in spitzen Klammern die Beschriftung eingefügt)

...
var Pac=<Einspeiseleistung>
var aPdc=new Array(<Generatorleistung>,0,0)
var curStatusCode = new Array(1)
curStatusCode[0]=4
var curFehlerCode = new Array(1)
curFehlerCode[0]=0
var PacArr= [[250]];
var PdcArr= [[262,0,0]];
...

Es gibt noch mehr Seiten
base_vars.js?nocache – Alle Basisdaten / Liste mit den Status- sowie Fehlercodes
min_day.js?nocache – Ähnlich days.js nur mit allen Tageswerten
days_hist.js?nocache – Alle Tageswerte (Einspeisung und Peak) seit Inbetriebnahme

Im Loxone Programm sind das ganze dann so ausPicoC Loxone SolarLogDas Programm (PicoC Script) liest die days.js (Tagesertrag und Peak) und min_cur.js (Einspeiseleistung) ein, analysiert diese und füllt die Ausgänge mit den Werten.

while(TRUE)
{
// IP Adresse anpassen!
char* pRet1 = httpget("192.168.1.123","/days.js?nocache");
if ((pRet1 != NULL) && (*pRet1 != 0))
{
char* p1 = strstrskip(pRet1,"|");
setoutput(0,atof(p1));  // Tagesertrag
p1 = strstrskip(pRet1,";");
setoutput(1,batof(p1)); // Peak
free(pRet1);
}
// IP Adresse anpassen!
char* pRet2 = httpget("192.168.1.123","/min_cur.js?nocache");
if ((pRet2 != NULL) && (*pRet2 != 0))
{
char* p2 = strstrskip(pRet2,"Pac=");
setoutput(2,batof(p2));  // Einspeiseleistung
free(pRet2);
}
sleeps(60);
}

Alpha-InnoTec

Hier wird es einem richtig schwer gemacht die Daten auszulesen. Die Webseite ist komplett in Java und es können so keine Daten von der Webseite ausgelesen werden. Ich bin nach diversen Verlinkungen auf ein PHP Script gestoßen, das die Daten auslesen kann. Ich habe die PHP-Skripte unter Downloads abgelegt.

Zum Ausführen wird ein Apache Webserver mit PHP benötigt. Es muss dann nur noch die config.php angepasst werden. Dann kann zum testen die Webseite index.php (kann umbenannt werden) aufgerufen werden. Jetzt sollten alle Daten (Temperaturen, Ein- und Ausgänge, Fehlermeldungen, …) vorhanden sein die auch über die Java Webseite bzw. über das Display an der Wärmepumpe abgerufen werden können.

Hier ein kleiner Auszug aus der Webseite damit man sich etwas mehr darunter vorstellen kann:

...
(10)Temperatur_TVL : 26.9 °C
(11)Temperatur_TRL : 25.0 °C
(12)Sollwert_TRL_HZ : 15.0 °C
(13)Temperatur_TRL_ext : 5.0 °C
(14)Temperatur_THG : 44.5 °C
(15)Temperatur_TA : 15.4 °C
(16)Mitteltemperatur : 17.9 °C
(17)Temperatur_TBW : 52.2 °C
(18)Einst_BWS_akt : 49.5 °C
...
(43)VBOout : EIN
(44)VD1out : AUS
(45)VD2out : AUS
(46)ZIPout : AUS
(47)ZUPout : AUS
(48)ZW1out : AUS
(49)ZW2SSTout : AUS
(50)ZW3SSTout : AUS
...

So sieht die Loxone Programmierung aktuell aus. Mein Wunsch / Ziel ist es noch die Parameter (Brauchwasser / Kühlung / …) auch zu verstellen. Das kommt hoffentlich späer noch einmal …

PicoC Loxone Wärmepumpe

Das Programm (PicoC Script) liest die index.php ein, analysiert diese und füllt die Ausgänge mit den Werten.

while(TRUE)
{
// IP Adresse und ggf. Pfad zum Script anpassen!
	char* pRet = httpget("192.168.1.123","/wp/index.php");
	if ((pRet != NULL) && (*pRet != 0))
	{
		char* p = strstrskip(pRet,"TVL : ");
		setoutput(0,atof(p));  // Vorlauf
		p = strstrskip(pRet,"TRL : ");
		setoutput(1,batof(p));  // Ruecklauf
		p = strstrskip(pRet,"TA : ");
		setoutput(2,batof(p));  // Außentemperatur
		p = strstrskip(pRet,"TBW : ");
		setoutput(3,batof(p));  // Brauchwasser
		p = strstrskip(pRet,"TWE : ");
		setoutput(4,batof(p));  // Sole Ein
		p = strstrskip(pRet,"TWA : ");
		setoutput(5,batof(p));  // Sole Aus
		free(pRet);
	}
sleeps(60);
}

Ich hoffe es hilft dem einen oder anderen bei seinem Projekt. Bin mal gespannt was sich noch so einbinden lässt … 🙂

UPDATE: Ich habe noch ein Skript (loxone.php) zum direkten Upload der Daten zur Loxone (ohne PicoC) mit unter Downloads abgelegt.

18 Gedanken zu „Loxone und PicoC“

  1. Hallo Stefan,
    gibt es für die Integration der Apha Innotec Wärmepumpe eine Schritt für Schritt Anleitung.
    Wo müssen die files hin und welche Infrastruktur muss geschaffen werden.
    Wie muss die Pumpe mit Loxone verbunden werden.
    Vielen Dank

    1. Hallo,

      eine Schritt für Schritt Anleitungen habe ich nicht, die Integration ist aber relativ einfach. Du musst wie in der Anleitung beschrieben das ZIP File aus dem Downloadbereich auf einem PHP-fähigen Webserver ablegen und die config.php Datei mit deinen Daten vervollständigen. Die VI** Variablen stehen in der Beschreibung der virtuellen Eingänge die passend in der Loxone Config angelegt werden müssen. Mit dem Aufruf der loxone.php werden die Werte der Wärmepumpe an die virtuellen Eingänge übertragen. Vorher würde ich aber kurz mit dem Aufruf der index.php prüfen, ob der Zugriff auf die Wärmepumpe überhaupt klappt. Die loxone.php dann in einen CronJob eintragen damit die Übertragung an den Loxone Miniserver automatisch erfolgt.

      Viele Grüße
      Stefan

  2. Sehr spannend, wir haben gerade letzte Woche unser Haus mit einer ähnlichen Konfiguration übernommen (alphainnotec, solarlogg 300). Sobald ich eine loxone hab werd ich auch starten 🙂

  3. Hallo Stefan,

    welche .php muß ich in dem skript jetzt strarten?
    loxone.php oder eine andere?

    Du hattest geschrieben:
    char* pRet = httpget(“192.168.1.123″,”/wp/wwc_java_reader2.php”);

    ich habe daraus gemacht
    char* pRet = httpget(“192.168.178.xxx”,”/web/AI/loxone.php”);

    (Eine Datei “wwc_java_reader2.php” habe ich nicht gefunden…)
    (Ich habe die Dateien auf einen Webserver auf meiner Synology abgelegt)

    Bitte gib mir eine Info/Hilfestellung

    Viele Grüße
    Markus

    1. Hallo Markus,

      ich habe den Fehler im Beitrag korrigiert. Im PicoC Skript muss die index.php eingetragen werden. Hier werden alle Werte auf der Webseite dargestellt und dann vom PicoC Skript ausgelesen.

      Falls du einen Cronjob auf der Synology erstellen kannst, wäre die loxone.php richtig.

      Viele Grüße
      Stefan

  4. Hallo Stefan,

    danke für die Info welche Datei ich aufrufen muß…
    Leider bekomme ich im Loxone noch nichts angezeigt…

    wenn ich im Internet Explorer “192.168.178.106/AI/loxone.php” eingebe erscheint die Meldung:
    PASS: Verbunden mit WWC Java Console 192.168.178.36 Port: 8888
    Status:0
    Auslesedauer 0 sek

    Wenn ich das gleiche mit “…/index.php” eingebe erscheinen alle Daten der Wärmepumpe, so wie von dir angezeigt…

    Hast du noch eine Idee?

    1. Hallo Markus,

      so jetzt aber … habe noch einen kleinen Formatierungsfehler im PicoC Skript gefunden und korrigiert. Habe es getestet und die Werte werden ausgelesen. Melde dich einfach nochmal, falls es damit immer noch nicht klappen sollte!

      Das die loxone.php keine Werte anzeigt ist richtig! Es erscheint nur die Kopfzeile und der Rest passiert im Hintergrund über HTTP Befehle.

      Viele Grüße
      Stefan

  5. Hallo Stefan

    vielen Dank nochmals für deine Inputs. Bei mir funktioniert nun das Auslesen der Heizung dank deiner Anleitung einwandfrei. Bist du mit der Ansteuerung der Anlage über die Loxone weitergekommen?

    Danke und Gruss aus der Schweiz
    Jürg

    1. Hallo Jürg,

      freut mich das es bei dir geklappt hat! Leider bin ich mit der Ansteuerung nicht weitergekommen. Ich habe auch bislang keine Projekte hierzu gefunden.

      Viele Grüße
      Stefan

  6. Hallo Stefan,

    das Script funktioniert hervorragend. Gibt es eine Möglichkeit, die Außentemperatur mit auszulesen? Ich habe nur mit dem Script im Programmbaustein einen Wert, dieser ist jedoch bei meiner Wärmepumpe im binären 2er-Komplement angegeben und müßte umgerechnet werden. Im neuen Script (loxone.php) ist es mir gar nicht gelungen, einen Wert auszulesen.

    Viele Grüße
    Holger

    1. Hallo Holger,

      im PicoC Skript ist sie bereits enthalten, in der loxone.php muss sie noch hinzugefügt werden. Die Außentemperatur (TA) ist normalerweise wie alle anderen Temperaturen aufgebaut?! Von welchem Hersteller ist denn die Wärmepumpe? Im Skript werden alle Temperaturen mit 0,1 multipliziert und dann kommen normale Werte raus?!

      Was passiert denn wenn du die index.php öffnest? Die loxone.php gibt selbst außer einer kurzen Statusmeldung nichts aus! Wenn in der Loxone Config für jeden Wert ein “Virtueller Eingang” angelegt und die config.php angepasst wurde, sollte auch das klappen. Möchtest du zusätzlich die Außentemperatur über die loxone.php an die Loxone übertragen, muss die config.php und die loxone.php entsprechend erweitert werden. Folgend die zusätzlichen Zeilen (nicht getestet) die du in den entsprechenden Dateien für die Außentemperatur einfügen musst.

      loxone.php

      // TA
      $daten_raw[15] = $daten_raw[15]*0.1;
      $handle = fopen(“http://$LoxUser:$LoxPassword@$LoxIP/dev/sps/io/$TA/$daten_raw[15]”, “r”);

      config.php

      // Temp Außen (15)
      $TA = “VI50”; // VI50 = Anschluss Name vom VI

      Ich hoffe ich konnte dir ein wenig weiterhelfen!

      Viele Grüße
      Stefan

      1. Hallo Stefan,

        danke für deine Hilfe, funtioniert bestens. Allerdings wird bei meiner Steuerung die Außntemeratur in einem sehr hohen wert angegeben. Hier die Ausgabe der index.php:

        ASS: Verbunden mit WWC Java Console 192.168.179.240 Port: 8889
        Status:0
        ==============================================================
        (10)Temperatur_TVL : 32.3 °C
        (11)Temperatur_TRL : 28.3 °C
        (12)Sollwert_TRL_HZ : 29.1 °C
        (13)Temperatur_TRL_ext : 5.0 °C
        (14)Temperatur_THG : 71.2 °C
        (15)Temperatur_TA : 429496717.6 °C
        (16)Mitteltemperatur : 429496719.9 °C
        (17)Temperatur_TBW : 55.0 °C
        (18)Einst_BWS_akt : 55.0 °C
        (19)Temperatur_TWE : 3.0 °C
        (20)Temperatur_TWA : 429496729.4 °C

        Ich habe daraufhin in der loxone.php den Wert der Außentemeratur mit dem Wert 4294967296 subtrahiert und es wird nun ein korrekter Wert angezeigt:

        $daten_raw[15] = ($daten_raw[15]-4294967296)*0.1;

        Also nochmals vielen Dank für deine Hilfe!

        Gruß
        Holger

  7. Hi,

    It seems you guys are pretty good with handling the picoC language. I am in desperate need of some help, trying to send /user.log file from loxone to mail receipient. Would this be possible with PicoC?

    best regards
    Christian

    1. Hi,

      I think this is not possible because there is no send mail function implemented?! Do you have a web server with PHP or a windows system with access to the Loxone Miniserver? If yes, you could use PHP or Powershell as a workaround to get the file and send it by e-mail?

      Best regards
      Stefan

    1. Hallo Markus,

      mit dem Thema Luxtronik habe ich mich schon lange nicht mehr beschäftigt. Damals gab es leider keine Informationen dazu, wie Werte an die Wärmepumpe gesendet werden können. Ich würde mir das nochmal anschauen, garantieren kann ich aber für nichts! 🙂

      Viele Grüße
      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert