Ankündigung

Einklappen

INFORMATION

Dieser Bereich ist für fertige Lösungen gedacht. Nutze bitte für Diskussionen die anderen Bereiche.
Mehr anzeigen
Weniger anzeigen

Luxtronik WP Steuerung auslesen (Alpha Innotec, Novelan, evtl. auch Buderus)

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

  • Luxtronik WP Steuerung auslesen (Alpha Innotec, Novelan, evtl. auch Buderus)

    Auf mehrfachen Wunsch hier der Programmcode, welchen ich leicht modifiziert (Tipp-Fehler entfernt, Code stammt aus dem "alten" Loxone Forum) verwende um meine Alpha Innotec Wärmepumpe auszulesen.

    Programmbaustein anlegen, diesen Code reinkopieren:

    #define BUFF_SIZE 1500
    #define RD_BLOCK_SIZE 4


    char szTmpBuffer;
    int nCnt;
    int nBytesReceived = 0;
    int i = 0;
    unsigned char szBuffer[1500];
    int nLen;
    int wert1;
    int wert2;
    int wert3;
    int wert4;
    float vorlauf;
    float ruecklauf;
    float ruecklauf_soll;
    float ruecklauf_ext;
    float heizgas;
    float aussentemperatur;
    float soletemperaturEIN;
    float soletemperaturAUS;
    float MischkreisFBH;
    float MischkreisFBHsoll;
    float Wassertasche;
    float Solarspeicher;
    float brauchwasser;
    float Status;
    float WMZHeiz;
    float WMZWW;
    float WMZPV;

    while(TRUE)
    {
    STREAM* stream = stream_create("/dev/tcp/192.168.178.50/8888",0,0);
    if (stream != NULL)
    {
    i=0;
    printf("Novelan READ");
    szBuffer[0] = 0x00;
    szBuffer[1] = 0x00;
    szBuffer[2] = 0x0b;
    szBuffer[3] = 0xbc;
    stream_write(stream,szBuffer,4);
    stream_flush(stream);
    printf("Stream 3004");
    szBuffer[0] = 0x00;
    szBuffer[1] = 0x00;
    szBuffer[2] = 0x00;
    szBuffer[3] = 0x00;
    stream_write(stream,szBuffer,4);
    stream_flush(stream);
    printf("Stream 0");
    nLen = stream_read(stream,szBuffer,4,1000);
    printf("Read Feedback");
    printf("Novelan Len=%d",nLen);
    nLen = stream_read(stream,szBuffer,4,1000);
    printf("Read Status");
    printf("Novelan Len=%d",nLen);
    nLen = stream_read(stream,szBuffer,4,1000);
    printf("Read Länge");
    printf("Novelan Len=%d",nLen);


    nLen = stream_read(stream,szBuffer,sizeof(szBuffer),1000) ;
    printf("Novelan Len=%d",nLen);
    stream_close(stream);
    printf("Novelan 40= %d",szBuffer[40]);
    szTmpBuffer=(szBuffer[40]);
    wert1=(szTmpBuffer);
    printf("Novelan 41= %d",szBuffer[41]);
    szTmpBuffer=(szBuffer[41]);
    wert2=(szTmpBuffer);
    printf("Novelan 42= %d",szBuffer[42]);
    szTmpBuffer=(szBuffer[42]);
    wert3=(szTmpBuffer);
    printf("Novelan 43= %d",szBuffer[43]);
    szTmpBuffer=(szBuffer[43]);
    wert4=(szTmpBuffer);
    vorlauf=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
    printf("Novelan Vorlauf= %f",vorlauf);

    printf("Novelan 44= %d",szBuffer[44]);
    szTmpBuffer=(szBuffer[44]);
    wert1=(szTmpBuffer);
    printf("Novelan 45= %d",szBuffer[45]);
    szTmpBuffer=(szBuffer[45]);
    wert2=(szTmpBuffer);
    printf("Novelan 46= %d",szBuffer[46]);
    szTmpBuffer=(szBuffer[46]);
    wert3=(szTmpBuffer);
    printf("Novelan 47= %d",szBuffer[47]);
    szTmpBuffer=(szBuffer[47]);
    wert4=(szTmpBuffer);
    ruecklauf=(wert1*256*256*256+wert2*256*256+wert3*2 56+wert4)*0.1;
    printf("Novelan Rücklauf= %f",ruecklauf);

    printf("Novelan 48= %d",szBuffer[48]);
    szTmpBuffer=(szBuffer[48]);
    wert1=(szTmpBuffer);
    printf("Novelan 49= %d",szBuffer[49]);
    szTmpBuffer=(szBuffer[49]);
    wert2=(szTmpBuffer);
    printf("Novelan 50= %d",szBuffer[50]);
    szTmpBuffer=(szBuffer[50]);
    wert3=(szTmpBuffer);
    printf("Novelan 51= %d",szBuffer[51]);
    szTmpBuffer=(szBuffer[51]);
    wert4=(szTmpBuffer);
    ruecklauf_soll=(wert1*256*256*256+wert2*256*256+we rt3*256+wert4)*0.1;
    printf("Novelan Rcklauf= %f",ruecklauf_soll);

    printf("Novelan 52= %d",szBuffer[52]);
    szTmpBuffer=(szBuffer[52]);
    wert1=(szTmpBuffer);
    printf("Novelan 53= %d",szBuffer[53]);
    szTmpBuffer=(szBuffer[53]);
    wert2=(szTmpBuffer);
    printf("Novelan 54= %d",szBuffer[54]);
    szTmpBuffer=(szBuffer[54]);
    wert3=(szTmpBuffer);
    printf("Novelan 55= %d",szBuffer[55]);
    szTmpBuffer=(szBuffer[55]);
    wert4=(szTmpBuffer);
    ruecklauf_ext=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
    printf("Novelan ruecklauf_ext= %f",ruecklauf_ext);

    printf("Novelan 56= %d",szBuffer[56]);
    szTmpBuffer=(szBuffer[56]);
    wert1=(szTmpBuffer);
    printf("Novelan 57= %d",szBuffer[57]);
    szTmpBuffer=(szBuffer[57]);
    wert2=(szTmpBuffer);
    printf("Novelan 58= %d",szBuffer[58]);
    szTmpBuffer=(szBuffer[58]);
    wert3=(szTmpBuffer);
    printf("Novelan 59= %d",szBuffer[59]);
    szTmpBuffer=(szBuffer[59]);
    wert4=(szTmpBuffer);
    heizgas=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
    printf("Novelan heizgas= %f",heizgas);

    printf("Novelan 60= %d",szBuffer[60]);
    szTmpBuffer=(szBuffer[60]);
    wert1=(szTmpBuffer);
    printf("Novelan 61= %d",szBuffer[61]);
    szTmpBuffer=(szBuffer[61]);
    wert2=(szTmpBuffer);
    printf("Novelan 62= %d",szBuffer[62]);
    szTmpBuffer=(szBuffer[62]);
    wert3=(szTmpBuffer);
    printf("Novelan 63= %d",szBuffer[63]);
    szTmpBuffer=(szBuffer[63]);
    wert4=(szTmpBuffer);
    aussentemperatur=(wert1*256*256*256+wert2*256*256+ wert3*256+wert4)*0.1;
    printf("Novelan aussentemperatur= %f",aussentemperatur);

    printf("Novelan 68= %d",szBuffer[68]);
    szTmpBuffer=(szBuffer[68]);
    wert1=(szTmpBuffer);
    printf("Novelan 69= %d",szBuffer[69]);
    szTmpBuffer=(szBuffer[69]);
    wert2=(szTmpBuffer);
    printf("Novelan 70= %d",szBuffer[70]);
    szTmpBuffer=(szBuffer[70]);
    wert3=(szTmpBuffer);
    printf("Novelan 71= %d",szBuffer[71]);
    szTmpBuffer=(szBuffer[71]);
    wert4=(szTmpBuffer);
    brauchwasser=(wert1*256*256*256+wert2*256*256+wert 3*256+wert4)*0.1;
    printf("Novelan Brauchwassertemp.= %f",brauchwasser);

    printf("Novelan 76= %d",szBuffer[76]);
    szTmpBuffer=(szBuffer[76]);
    wert1=(szTmpBuffer);
    printf("Novelan 77= %d",szBuffer[77]);
    szTmpBuffer=(szBuffer[77]);
    wert2=(szTmpBuffer);
    printf("Novelan 78= %d",szBuffer[78]);
    szTmpBuffer=(szBuffer[78]);
    wert3=(szTmpBuffer);
    printf("Novelan 79= %d",szBuffer[79]);
    szTmpBuffer=(szBuffer[79]);
    wert4=(szTmpBuffer);
    soletemperaturEIN=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
    printf("Novelan soletemperaturEIN= %f",soletemperaturEIN);

    printf("Novelan 80= %d",szBuffer[80]);
    szTmpBuffer=(szBuffer[80]);
    wert1=(szTmpBuffer);
    printf("Novelan 81= %d",szBuffer[81]);
    szTmpBuffer=(szBuffer[81]);
    wert2=(szTmpBuffer);
    printf("Novelan 82= %d",szBuffer[82]);
    szTmpBuffer=(szBuffer[82]);
    wert3=(szTmpBuffer);
    printf("Novelan 83= %d",szBuffer[83]);
    szTmpBuffer=(szBuffer[83]);
    wert4=(szTmpBuffer);
    soletemperaturAUS=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
    printf("Novelan soletemperaturAUS= %f",soletemperaturAUS);

    printf("Novelan 84= %d",szBuffer[84]);
    szTmpBuffer=(szBuffer[84]);
    wert1=(szTmpBuffer);
    printf("Novelan 85= %d",szBuffer[85]);
    szTmpBuffer=(szBuffer[85]);
    wert2=(szTmpBuffer);
    printf("Novelan 86= %d",szBuffer[86]);
    szTmpBuffer=(szBuffer[86]);
    wert3=(szTmpBuffer);
    printf("Novelan 87= %d",szBuffer[87]);
    szTmpBuffer=(szBuffer[87]);
    wert4=(szTmpBuffer);
    MischkreisFBH=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
    printf("Novelan MischkreisFBH= %f",MischkreisFBH);

    printf("Novelan 88= %d",szBuffer[88]);
    szTmpBuffer=(szBuffer[88]);
    wert1=(szTmpBuffer);
    printf("Novelan 89= %d",szBuffer[89]);
    szTmpBuffer=(szBuffer[89]);
    wert2=(szTmpBuffer);
    printf("Novelan 90= %d",szBuffer[90]);
    szTmpBuffer=(szBuffer[90]);
    wert3=(szTmpBuffer);
    printf("Novelan 91= %d",szBuffer[91]);
    szTmpBuffer=(szBuffer[91]);
    wert4=(szTmpBuffer);
    MischkreisFBHsoll=(wert1*256*256*256+wert2*256*256 +wert3*256+wert4)*0.1;
    printf("Novelan MischkreisFBHsoll= %f",MischkreisFBHsoll);

    printf("Novelan 104= %d",szBuffer[104]);
    szTmpBuffer=(szBuffer[104]);
    wert1=(szTmpBuffer);
    printf("Novelan 105= %d",szBuffer[105]);
    szTmpBuffer=(szBuffer[105]);
    wert2=(szTmpBuffer);
    printf("Novelan 106= %d",szBuffer[106]);
    szTmpBuffer=(szBuffer[106]);
    wert3=(szTmpBuffer);
    printf("Novelan 107= %d",szBuffer[107]);
    szTmpBuffer=(szBuffer[107]);
    wert4=(szTmpBuffer);
    Wassertasche=(wert1*256*256*256+wert2*256*256+wert 3*256+wert4)*0.1;
    printf("Novelan Wassertasche= %f",Wassertasche);

    printf("Novelan 108= %d",szBuffer[108]);
    szTmpBuffer=(szBuffer[108]);
    wert1=(szTmpBuffer);
    printf("Novelan 109= %d",szBuffer[109]);
    szTmpBuffer=(szBuffer[109]);
    wert2=(szTmpBuffer);
    printf("Novelan 110= %d",szBuffer[110]);
    szTmpBuffer=(szBuffer[110]);
    wert3=(szTmpBuffer);
    printf("Novelan 111= %d",szBuffer[111]);
    szTmpBuffer=(szBuffer[111]);
    wert4=(szTmpBuffer);
    Solarspeicher=(wert1*256*256*256+wert2*256*256+wer t3*256+wert4)*0.1;
    printf("Novelan Solarspeicher= %f",Solarspeicher);

    printf("Novelan 476= %d",szBuffer[476]);
    szTmpBuffer=(szBuffer[476]);
    wert1=(szTmpBuffer);
    printf("Novelan 477= %d",szBuffer[477]);
    szTmpBuffer=(szBuffer[477]);
    wert2=(szTmpBuffer);
    printf("Novelan 478= %d",szBuffer[478]);
    szTmpBuffer=(szBuffer[478]);
    wert3=(szTmpBuffer);
    printf("Novelan 479= %d",szBuffer[479]);
    szTmpBuffer=(szBuffer[479]);
    wert4=(szTmpBuffer);
    Status=(wert1*256*256*256+wert2*256*256+wert3*256+ wert4);
    printf("Novelan Status= %f",Status);

    printf("Novelan 604= %d",szBuffer[604]);
    szTmpBuffer=(szBuffer[604]);
    wert1=(szTmpBuffer);
    printf("Novelan 605= %d",szBuffer[605]);
    szTmpBuffer=(szBuffer[605]);
    wert2=(szTmpBuffer);
    printf("Novelan 606= %d",szBuffer[606]);
    szTmpBuffer=(szBuffer[606]);
    wert3=(szTmpBuffer);
    printf("Novelan 607= %d",szBuffer[607]);
    szTmpBuffer=(szBuffer[607]);
    wert4=(szTmpBuffer);
    WMZHeiz=(wert1*256*256*256+wert2*256*256+wert3*256 +wert4)*0.1;
    printf("Novelan WMZHeiz= %f",WMZHeiz);

    printf("Novelan 608= %d",szBuffer[608]);
    szTmpBuffer=(szBuffer[608]);
    wert1=(szTmpBuffer);
    printf("Novelan 609= %d",szBuffer[609]);
    szTmpBuffer=(szBuffer[609]);
    wert2=(szTmpBuffer);
    printf("Novelan 610= %d",szBuffer[610]);
    szTmpBuffer=(szBuffer[610]);
    wert3=(szTmpBuffer);
    printf("Novelan 611= %d",szBuffer[611]);
    szTmpBuffer=(szBuffer[611]);
    wert4=(szTmpBuffer);
    WMZWW=(wert1*256*256*256+wert2*256*256+wert3*256+w ert4)*0.1;
    printf("Novelan WMZWW= %f",WMZWW);

    printf("Novelan 612= %d",szBuffer[612]);
    szTmpBuffer=(szBuffer[612]);
    wert1=(szTmpBuffer);
    printf("Novelan 613= %d",szBuffer[613]);
    szTmpBuffer=(szBuffer[613]);
    wert2=(szTmpBuffer);
    printf("Novelan 614= %d",szBuffer[614]);
    szTmpBuffer=(szBuffer[614]);
    wert3=(szTmpBuffer);
    printf("Novelan 615= %d",szBuffer[615]);
    szTmpBuffer=(szBuffer[615]);
    wert4=(szTmpBuffer);
    WMZPV=(wert1*256*256*256+wert2*256*256+wert3*256+w ert4)*0.1;
    printf("Novelan WMZPV= %f",WMZPV);

    setio("VI12",vorlauf);
    setio("VI9",ruecklauf);
    setio("VI25",ruecklauf_soll);
    setio("VI26",ruecklauf_ext);
    setio("VI28",heizgas);
    setio("VI24",aussentemperatur);
    setio("VI15",soletemperaturEIN);
    setio("VI27",soletemperaturAUS);
    setio("VI14",Status);
    setio("VI13",brauchwasser);
    setio("VI17",MischkreisFBH);
    setio("VI18",MischkreisFBHsoll);
    setio("VI19",Wassertasche);
    setio("VI20",Solarspeicher);
    setio("VI21",WMZHeiz);
    setio("VI22",WMZWW);
    setio("VI23",WMZPV);
    setio("VI32",1);

    }
    else
    {
    printf("Novelan no connection");
    setio("VI32",0);
    }
    sleeps(60); // wait 60 second
    }


    - IP Adresse anpassen!!
    -Virtuelle Eingänge anlegen, Anschluss über dessen Eigenschaftsfenster kontrollieren und ebenfalls im Programmcode anpassen (VIxx, ganz unten im Code)
    -Virtuellen Eingang dann direkt in die Visualisierung packen oder so wie ich über einen analogen Statuswert

    Sicherlich hat das alles noch Potential, allerdings hab ich mich als absoluter Noob erstmal in das Programmiergedöns einarbeiten/reindenken müssen. Mit etwas Hirnschmalz bin ich vom schon ziemlich fehlerbefallenen "Urcode" hier gelandet. Wenn ich etwas mehr Zeit habe (evtl. kommenden Herbst :-)) pack ich eventuell noch ein paar Werte mit rein. Ich denke darauf kann der in oder andere jetzt mal aufbauen und hier evlt. seine Erfahrung kund tun...

    In der angehängten TXT sind alle auslesbaren Parameter aufgeführt, im Screenshot seht ihr meine aktuelle "AIT Testseite" und wie das ganze dann in der Visu rüber kommt...
    ...es gibt noch weitere Werte aus der Steuerung, welche für mich aktuell allerdings nicht interessant sind! Bisher lese ich nur Temperaturen und den Betriebszustand aus und steuere über eine Diff.-Temperatur-Steuerung meine Umwälzpumpe vom Holzkamin mit Wassertasche (Temperaturen hole ich ebenfalls über die Luxtronik Sensoren).

    Angehängte Dateien

  • #2
    Sehr schön!
    Diese Variante habe ich bei uns auch schon ausführlich getestet, lief sehr zuverlässig und fehlerfrei. Wer die Quick'n dirty-Lösung für das Auslesen akzeptiert, kann über den Code definitiv voll auf seine Kosten kommen. Danke, dass du dir einmal die Zeit genommen hast, ich hatte es mir auch schon auf die Liste gesetzt...

    Um dieses HowTo zu komplettieren, setze ich hier noch meinen Senf dazu:

    Offiziell sieht alpha innotec diese Variante nur als eigentlich ungewollten Exploit an, da man hier auf die Java-Runtime-Daten der Steuerung zugreift. Der Hersteller wünscht sich deshalb natürlich, dass man den mittlerweile offiziell vorhandenen Weg über die Modbus/TCP-Schnittstelle geht, für die man allerdings eine separate Lizenz benötigt. Dieser Weg sieht so aus:

    Man benötigt:
    - Luxtronik 2.0 oder neuer mit Firmware-Version V1.76 bzw. V2.73 bzw. V3.74 bzw. V4.73 oder höher
    - Netzwerkanschluss an der WP
    - ait GLT-Lizenz für Modbus/TCP - für ca. 300-400€ beim Heizungstechniker oder ait zu haben. Zum Testen gibt es eine Test-Lizenz, die immer nur 4 Stunden am Stück läuft.
    - Miniserver mit Config 7 aufwärts, damit Modbus/TCP sauber unterstützt wird

    Die Beschreibung der GLT-Schnittstelle findet man hier. Neben den aktuellen Daten wie sie niggo über das PicoC-Script ausliest, kann man über die GLT-Schnittstelle auch Daten in die WP schreiben, darunter z.B. Solltemperaturen, Betriebsmodi oder auch die Smart Grid-Schnittstelle. Auch einzelne Digitalausgänge (Single Coils) wie Pumpen lassen sich darüber schalten. Allerdings wäre ich damit sehr vorsichtig, da man hier direkt in die Funktion der WP eingreifen kann...

    In der Wärmepumpe kann man unter Systemsteuerung die IP-Adresse der WP einstellen, diese sollte selbstverständlich auf eine fest vergebene IP gesetzt werden.
    Unter Info => GLT kann man die Einstellungen der GLT-Schnittstelle einsehen. Hier steht die Device-ID, welche als Modbus-Adresse beim Modbus-Gerät in der Config eingetragen werden muss. Standardmäßig ist je nach FW-Stand die 1, häufig die 50 eingetragen.

    Die einzelnen Datenpunkte werden als Sensoren bzw. Aktoren mit den entsprechenden Gruppenadressen eingetragen. ait verwendet nur Datenpunkte mit 16 bit signed/unsigned. Die Datenpunkte sind mit 10 multipliziert, was entsprechend in der Korrektur angepasst werden muss.


    Hier habe ich eine kleine Config mit den grundlegenden Datenpunkten erstellt, damit ihr seht, wie es an sich programmiert wird: ait-Test.Loxone
    Und hier noch kurz einige Screenshots der Config und der Einstellungen:
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: ait-Test-config.JPG Ansichten: 1 Größe: 82,1 KB ID: 30117
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: ait-Test-config2.JPG Ansichten: 1 Größe: 36,7 KB ID: 30118



    Die Smart Grid-Schnittstelle wird mit Werten von 0 bis 4 angesteuert. Damit fährt man die 4 Betriebszustände, welche durch den Bundesverband Wärmepumpe für die SG-Ready-Funktion definiert wurden. Die einzelnen Betriebszustände sind:
    0: EVU-Sperre
    1: Abgesenkter Betrieb
    2: Normalbetrieb
    3: Erhöhter Betrieb
    4: Dazu habe ich gerade noch keine Informationen. ait hat in der Software auch einen PV-Boost eingefügt, der ursprünglich über den Schwimmbad-Eingang geschalten wurde. evtl. ist das der 5. Betriebszustand.

    Falls weitere Fragen sind, einfach melden!
    Zuletzt geändert von Benjamin Jobst; 15.Mär.2017, 16:48.
    MfG Benny

    Kommentar


    • preslmayer
      preslmayer kommentierte
      Kommentar bearbeiten
      Danke für die ausführliche Antwort. Meinst du ich könnte ohne bedenken auf die im Link zu findende Version 1.80 updaten? Ich habe nämlich hierbei bedenken, da ich mir schon mal meine Steuerung mit einer falschen Version zerschossen habe.

    • Benjamin Jobst
      Benjamin Jobst kommentierte
      Kommentar bearbeiten
      Bei allen ait-Wärmepumpen, die wir bisher in den Fingern hatten, hat das ohne Probleme funktioniert.
      Dass das auch bei dir funktioniert, kann ich dir aber nicht garantieren ;-) Besonders mit deiner Spezial-Firmware weiß ich nicht, welche Funktionen da wichtig waren... Ich würde dir raten, einfach einmal kurz bei alpha innotec nachzufragen. Oder beim Heizungsbauer, der dir die Version aufgespielt hat?

    • preslmayer
      preslmayer kommentierte
      Kommentar bearbeiten
      Danke vielmals! Bin bereits per mail mit AIT in Kontakt. Hier wurde ich gefragt, ob ich ein RBE habe, da anscheinend meine Version für RBE (Raumbedieneinheit) ausgelegt ist:

      meine Konfiguration:
      alpha innotec Wärmepumpe SWC, Ventower, RBE, Luxtronik 2.1 (Version F1.74B), Lüftungsplatine

      Keine Ahnung, ob dies so eine außergewöhnliche Zusammenstellung ist. :-S

  • #3
    Wegen einer Nachfrage über PN hier noch eine kurze Erklärung, wie man weitere Werte integrieren kann, für den ein oder anderen sicher auch interessant:

    -Aus der im 1. Post angehängten TXT den gewünschten Wert suchen
    -oben im Programm den neuen Wert bei den "float" Werten ergänzen, einfach ein eigenes Stichwort als Bezeichnung wählen
    -einen neuen "Block" anlegen/einen vorhandenen Kopieren:
    printf("Novelan 612= %d",szBuffer[612]);
    szTmpBuffer=(szBuffer[612]);
    wert1=(szTmpBuffer);
    printf("Novelan 613= %d",szBuffer[613]);
    szTmpBuffer=(szBuffer[613]);
    wert2=(szTmpBuffer);
    printf("Novelan 614= %d",szBuffer[614]);
    szTmpBuffer=(szBuffer[614]);
    wert3=(szTmpBuffer);
    printf("Novelan 615= %d",szBuffer[615]);
    szTmpBuffer=(szBuffer[615]);
    wert4=(szTmpBuffer);
    WMZPV=(wert1*256*256*256+wert2*256*256+wert3*256+w ert4)*0.1;
    printf("Novelan WMZPV= %f",WMZPV);

    die Zahlenwerte nach ("Novelan anpassen (die Nummerierung in der TXT vor dem gewählten Wert mit 4 multiplizieren). Im Beispeil ists der WMZ für die PV Funktion, laut TXT Nr. 153 (WMZ Schwimmbad), mal 4 = 612. Mit diesem Wert beginnen, die 3 folgenden dann einfach aufsteigend eintragen. Ab 616 würde dann "WMZ seit" abgefragt.
    -einen weiteren virtuellen Eingang anlegen
    -Je nach Wert muss über den Statuswert eventuell noch "übersetzt" werden

    ...ich hoffe es ist halbwegs verständlich!? Außer etwas html vor 15 Jahren bin ich ein absoluter Programmier Noob und hab das vorhandene Skript einfach durch logisches "zerlegen" und rumprobieren durchschaut. Mit Bits und Bytes und Hexadingsbums hab ich eigentlich nix am Hut... :-)

    Es ist auch ein Script zum Werte schreiben im Umlauf, daran will ich aktuell allerdings noch nicht ran! Bin sowieso der Meinung dass an einer vernünftig eingestellten Heizung eigentlich nicht aktiv eingegriffen werden muss.... (wobei es schön wäre wenn man das über Loxon trotzdem könnte... ;-) )

    Kommentar


    • #4
      Coole Sache...

      Funktioniert... :-)
      Welche Formel ist eigentlich aber im Formelbaustein hinterlegt?
      Grüße

      Matthias
      gemischte KNX- und Loxoneinstallation im EFH Neubau

      Kommentar


      • #5
        In der Formel berechne ich die Vorlauf/Rücklauf Spreizung, da ich hier gelegentlich Probleme hatte wollte ich das mal mitloggen... :-)

        Kommentar


        • #6
          Hallo,

          ​bin gerade an so einer Wärmepumpe dran und versuche mit oben aufgeführten Code diese Anbindung hinzubekommen, leider funktioniert es bei mir nicht ! Habe der Wärmepumpe eine feste IP eingestellt, muss sonst noch eine Einstellung vorgenommen werden ? Fernzugriff oder so? IP im Code habe ich angepasst! Kann mir da jemand weiter helfen :-)

          LG Jens

          Kommentar


          • #7
            Hi Jens,

            was heißt, es funktioniert nicht? Bekommst du die Meldung "Novelan no connection" oder läuft überhaupt nichts? Welche WP hast du, welchen FW-Stand?
            An sich brauchst du nur die IP zu ändern, aber der Port 8888 muss da bleiben, da hier die Daten der WP offenliegen...
            MfG Benny

            Kommentar


            • #8
              Hallo Benny,
              ​Geht gar nix!
              Wärmepumpentyp L2G
              Softwarestand F1.74B
              MfG
              Jens

              Kommentar


              • preslmayer
                preslmayer kommentierte
                Kommentar bearbeiten
                Hallo!
                Habe gesehen du hast den selben Softwarestand wie ich in der Luxtronik (F1.74B) ! Hast du bei dir Software schon upgedated?
                Wenn ja - auf welche Version?
                danke

            • #9
              Okay... Hast du ein bisschen Ahnung von PicoC? Was sagt der Logfile, kommen da Fehlermeldungen raus bezüglich des Codes?
              Evtl. wäre es sinnvoll, wenn du mir deine Config schickst, damit ich sie kurz testen kann...
              MfG Benny

              Kommentar


              • #10
                Nein PicoC habe ich keine Ahnung!​

                Kommentar


                • #11
                  Wollte das Programm senden ! Keine Ahnung ob es raus ging!

                  Kommentar


                  • Benjamin Jobst
                    Benjamin Jobst kommentierte
                    Kommentar bearbeiten
                    Alles klar, habe dir schon geantwortet. Bei PicoC muss man sehr aufpassen, was einem der Log sagt, dann kann man den Fehler eingrenzen ;-)
                    z.B. mag der Programmbaustein keine Leerzeichen in Variablen-Bezeichnungen. Niggo du hast da ein paar Leerzeichen-Fehler in deinen Umrechnungen, das führt zu Fehlern ;-)

                • #12
                  ...die Leerzeichen tauchen, wieso auch immer, nach dem kopieren des Programmtextes hier ins Forum auf...

                  Ich habe das bei mir zu 100% funktionierende Programm hier rein kopiert und nimmer drüber geschaut...

                  Das war schon im "alten" Forum Gegenstand einer Diskussion, mit den plötzlich auftretenden Leerzeichen, am besten direkt im LoxConfig nochmal durchschauen!

                  Kommentar


                  • Benjamin Jobst
                    Benjamin Jobst kommentierte
                    Kommentar bearbeiten
                    Das hatte ich aber nicht nur im Forum sondern zum Teil auch aus anderen Quellen... mir hat es oft genug den Code zerschossen, sei es mit Leerzeichen, Tabs, Absätzen oder sonst was, wenn ich Programmteile irgendwoher in den "richtigen" Editor gezogen habe oO

                • #13
                  Ok werde es testen Danke

                  Kommentar


                  • #14
                    Super! Werte werden angezeigt!

                    ​Danke
                    MfG
                    Jens

                    Kommentar


                    • #15
                      Hallo,

                      ist in der TXT Datei auch der Wert dabei Isttemperatur und gewünschte Solltemperatur von dem Bediendisplay?

                      MfG
                      Jens

                      Kommentar

                      Lädt...
                      X