Abfrage von HomeMatic-Sensoren per Script mit David.fx

  • Hallo liebes DIE Spezialisten Team.


    Ich habe folgendes Problem:
    Momentan richte ich eine
    HomeMatic CCU ein. Der Port ist bereits eingerichtet und ich arbeite momentan erstmal mit David.fx statt Dashboard.
    Doch leider schaffe ich es nicht Werte von Sensoren aus dem State-Ordner per Script zu beziehen.
    Ich habe versucht mit dem Befehl getDeviceEntry einen Wert zu erhalten, aber es passiert einfach nichts, weshalb ich denke, dass ich einen Syntaxfehler gemacht habe.
    In der Anleitung zur Automation steht folgende allgemeine Schreibweise:

    Code
    getDeviceEntry (objAddr, objSubject)


    Wenn ich diese auf mein Wandthermostat, welches Aktor und Sensor zugleich ist, beziehe, würde das für mich so aussehen:

    Code
    var a = getDeviceEntry("192.168.123.96:2001/HEQ0079152:1/TEMPERATURE", "WEATHER");


    Aber wie gesagt es rührt sich nichts. Ich hab versucht meinen Fehler mit verschiedenen Schreibweisen zu beseitigen, bin aber gescheitert.
    Kann mir da jemand weiterhelfen?


    Vielen Dank im voraus
    Vista64


    Admin-Edit: Code-Tags eingefügt

  • Hallo,


    ich arbeitet meist mit dem Dashboard (das greift auch auf das State-Archive von David.fx zu), aber auch hier benötigt man Scripte.
    Direkt in David habe ich mal ein Test-Script erstellt, was eine Lampe am Dimmaktor stufenweise einschaltet und dafür prüft, ob der Dimmer gerade arbeitet (Sensor WORKING).


    Code
    var oDapaTestWorking = "192.168.10.10:2001/EEQ0020338:1/WORKING";
    var isWorking = getDeviceEntry(oDapaTestWorking);


    Zu beachten hierbei ist, dass Du hierdurch ein Objekt erhälst. Um an den Wert zu kommen, musst Du die Eigenschaft ".Value" nutzen.


    Code
    if (isWorking.value == 0)
    {
        // mach was
    }


    Aufpassen musst Du auch mit dem optionalen Parameter "objSubject". Dieser bezieht sich auf den Betreff des Eintrages im StateArchive. Am besten machst Du es nur über die Adresse und lässt den zweiten Parameter einfach weg, da dieser verändert werden kann und Dein Skript dann nicht mehr funktioniert. Die Adresses dagegen ist statisch.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Danke für die schnelle Antwort.
    Ich hab das mit einbezogen, was du geschrieben hast. Ich wusste nicht, dass man mit einem Punktoperator den Wert erst aus dem Objekt ziehen muss. Trotzdem regt sich bei mir irgendwie nichts. Ich hab das kleine Script hier geschrieben um zu überprüfen, ob die Variable überhaupt einen Wert bekommt.


    Code
    var a = getDeviceEntry("192.168.123.96:2001/HEQ0079152:1/TEMPERATURE");
    while(1 == 1){
      if(a.value != 20)
      {
        xreturn("HomeMatic:192.168.123.96:2001/HEQ0079152:2/SETPOINT", "26.0");
      }
    }


    Ist da irgendwo ein Fehler drin?


    Sorry weiß nicht wie man die Scriptteile so schön hervorhebt,wie du es getan hast.


    P.S.:Kann es ein, dass alte Programme irgendwo auf dem Server zwischengespeichert sind und neue oder umgeänderte Programme blockieren.


    Gruß Johannes

  • Hallo Johannes,


    im Editor hier gibt es ein Button mit dem #-Zeichen. Einfach Deinen Quelltext markieren und den Button anklicken, schon wird er von Code-Tags umrahmt und alles sieht schön aus (nur im Chrome zerhaut er beim Speichern die Zeilenumbrüche...).


    Zu Deinem Problem.
    Teste doch zunächst mal mit Lichtaktoren, da siehst Du die Rückmeldung deutlich. ;)
    Was auch gut funktioniert sind Timer, dann brauchst Du nicht mit endlosschleifen zu arbeiten. Ich habe zum Test mal einen Timer erstellt, Serientyp auf minütliche Wiederholung und folgenden Inhalt:



    Der untere Teil erzeugt eine E-Mail die den aktuellen Temperaturwert als Bodytext beinhaltet.


    Bei der Heizungssteuerung der HomeMatic muss man wissen, dass man hierbei nur den Sollwert (SetPoint) des Wandthermostates setzen kann.
    Ich bin mir im Moment auch nicht sicher, ob man Setpoint direkt ansprechen kann.


    Die Eigenschaften der verschiedenen Aktoren und Sensoren kann man ganz gut über die Porteigenschaften herausfinden. Also im Admin auf Port->Eigenschaften->Extended TLD->Geräte Liste anzeigen->Details eines Gerätes oder Untergerätes. Dort kann man dann die Empfangs- und Sendeadressen einsehen. So sieht man genau welche Adressen es gibt und welche schreibbar sind.
    Setpoint sollte aber generell schreibbar sein, habe damit aber selbst noch nicht gearbeitet, meine aber mal gelesen zu haben, dass das so direkt nicht geht...


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • P.S.:Kann es ein, dass alte Programme irgendwo auf dem Server zwischengespeichert sind und neue oder umgeänderte Programme blockieren.


    Nein, es ist nur das da was man sieht und auch nur das wird ausgeführt.
    Allerdings werden Javascriptfehler nicht dargestellt, was das debuggen immens schwierig macht.

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hi,
    sorry, dass ich mich die letzten 2 Tage nicht gemeldet habe. Ich sitz nicht dauerhaft an der Automatisierungsgeschichte hier.
    Ich hab in den Adressordner geschaut, die Adressen sind die Gleichen. Also ich glaube bei den Adressen selbst liegt nicht mein Fehler.
    Ich hab mir jetzt mal einen Fensterkontakt als Sensor genommen, weil der nur 2 Zustände hat. Hab da das kleine Script hier geschrieben, aber er führt es nur für den Fall: Kontakt = 0 aus. Hab mal in den State-Ordner geschaut und da ändert sich nichts am Wert des Sensors, wenn ich ihn öffne. Weißt du woran das liegen könnte und in meinem Script hab ich keinen Fehler oder?





    Gruß Johannes


    P.S.: Der Setpoint lässt sich setzen. Ich nehm mal an das Thermostat vergleicht Soll- und Istwert und dreht das Ventil dann auf bzw. zu.

  • Hallo Johannes,


    ja, korrekt, beim WandThermostat werden SOLL und IST Wert verglichen und danach stellt das Thermostat das Ventil.


    Hast Du mein Skript denn mal getestet? Da ist die Rückmeldung eindeutiger, so kannst Du besser debuggen.
    Die normalen Tür-Fensterkontakte geben bei mir schon den State 0 und 1 zurück. So Frage ich diese auch Dashboard ab.
    Wie hast Du die Kontakte denn in der Zentrale konfiguriert? Man kann ja einstellen, was in welchem Zustand gesendet werden soll.


    Was sagen denn die LEDs wenn Du das Fenster auf und zu machst? Man muss bei der Montage ein bisschen aufpassen, da nicht in jeder Lage einwandfrei geschaltet wird.
    Des Weiteren kannst Du im Protokoll der Zentrale sehen, was ausgelöst wurde.


    Generell solltest Du erstmal über die Zentrale die Funktion laufen haben, bevor Du die Skripte im David angehst. Sonst hast Du zu viele mögliche Fehlerquellen.
    Ebenso bin ich skeptisch mit der While-Schleife im Skript. Damit ballerst Du ja ständig Informationen über den Bus, so schnell kann weder David noch die HomeMatic die Daten verarbeiten. Daher würde ich immer mit dem Timer oder einer Regel testen.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hi Jens,


    Ja ich hab dein Script getestet. Hat auch funktioniert, danke. Also getDeviceEntry scheint zu funktionieren.



    Sorry für das ständige Editieren. Es funktioniert soweit erstmal. Ich meld mich fals ich Rat gebrauchen könnte.



    P.S.: Du hast ja angenehme Arbeitszeiten. Viertel 4^^.


    Gruß Johannes

  • P.S.: Du hast ja angenehme Arbeitszeiten. Viertel 4.


    4 Stunden Schlaf von Mittwoch auf Donnerstag, 10-14 Uhr Büro, 8 Std. Autofahrt nach Murnau (bei München), SQL Server Probleme bearbeiten bis 4, eingeschlafen, 7 Uhr von Telefon geweckt, SQL Server Workaround gebastelt bis 9, nach München gefahren, Schulung gehalten bis 16, wieder nach Murnau, versucht zu schlafen, ständig Telefon beim wegdösen, was essen, nicht mehr müde, glotze, aber jetzt schlaf ich gleich ein. ;)


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

  • Hi Jens,


    kannst du mir bitte erklären was die Befehle m_dbsr und m_rxsr bewirken? Die geben mir ja auch einen SendRec-Eintrag, aber warum muss ich die nicht mit einer Adresse bezeichnen und was ist in dem Eintrag enthalten?



    Gruß Johannes



    P.S.: Seid ihr eine Tochterfirma oder eine Abzweigung von Tobit?

  • Hallo Johannes,


    wir haben direkt nichts mit Tobit zu tun, sind genauso Fachhändler wie jeder andere auch - ausser vielleicht, dass wir uns wesentlich intensiver mit der Materie beschäftigen als die meisten Anderen.


    m_rxsr ist eine Referenz auf die auslösende Adresse. Wenn Du also ein Regel erstellst (ist ja quasi ein Event), dann bezieht sich diese in der Regel auf eine Adresse die den "Event" (die Regel) auslöst. Mit m_rxsr kannst Du auf diese Adresse zugreifen, ohne die Adresse selbst fest zu definieren. Das ist praktisch, wenn verschiedene Module die Regel auslösen können.


    m_dbsr bezieht sich auf den Eintrag im Statearchive, allerdings weiß ich grad auch nicht, wie man die Referenz davon erhält. Vermutlich aber auch über die auslösende Adresse...?


    Weitere Infos und Beispiele dazu findest Du aber auch im Automation.pdf welches im Automation Verzeichnis auf Fileebene liegt.


    ---


    So, jetzt hast Du zwischenzeitlich den Beitrag geändert, weil ich schon gestern mit der Antwort angefangen hatte. ;)


    Das SendRec beinhaltet alle möglichen Informationen einer Nachricht, wie z.B. Absender, Empfänger, etc. Im Falle der Automation die Adressen, Werte, etc.


    Gruß Jens

    Es wäre schön, Deinen Vornamen zu kennen. Bitte beachte unsere Forenregeln und die Netiquette.

    ----------

    Bitte teilen/weitersagen: STARFACE Module Databasewww.sfm-db.com


    STARFACE Excellence PartnerSTARFACE Module CreatorTobit.Software Authorized Partner (Mailserver/Unified Messaging)work4all! Solution Partner (CRM/ERP)Securepoint Professional Partner (Firewall/UTM)


    1 Qubit - J.Suingwww.1qubit.deSoftware - Service - Coding

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!