Werte von 1-Wire Sensor in Logocontrolseite schreiben

Willkommen Foren LogoControl Werte von 1-Wire Sensor in Logocontrolseite schreiben

12 Beiträge anzeigen - 1 bis 12 (von insgesamt 12)
  • Autor
    Beiträge
  • #2092
    lounsome
    Teilnehmer

    Hallo, das System ist echt klasse!
    Ich würde aber gerne noch meinen Sensor auf der Logocontrol-Seite anzeigen,
    wie könnte ich das anstellen.
    Bis jetzt schreibe ich den Wert einfach in einen .txt-File.

    !/usr/bin/python -O
    import time
    # Create a unique timestamp for inclusion in the log...
    timestamp = time.strftime("%d-%m-%Y %H:%M:%S")
    # append the filename with the date (this will start a new log daily)...
    logname = time.strftime("%d-%m-%Y")
    filename = "".join(["WW_Speicher_Temperatur_", logname, ".txt"])
    # If already created, this will open the current log file, if not it will create a new one...
    datafile = open(filename, "a")
    # open the sensor log file as seen in the tutuorial (replacing 28-000003f1cede with the number of your sensor)...
    tfile = open("/sys/bus/w1/devices/28-04146acb1aff/w1_slave")
    # read the data and close the file...
    text = tfile.read()
    tfile.close()
    # Split the data and extract the temperature value...
    temperature_data = text.split()[-1]
    temperature = float(temperature_data[2:])
    temperature = temperature / 1000
    # write our newly formatted date, time and sensor value to our log file...
    datafile.write(timestamp + "," + str(temperature) + ",\n")
    datafile.close()
    print ("Datei mit Namen: " + filename + " erstellt" + ",\n")
    print ("               Datum       Zeit   Temperatur")
    print ("WW_Speicher: " + timestamp + ", " + str(temperature) + ",\n")
    #2094
    admin
    Administrator

    Hi,

    du könntest die Temperatur einfach von deinem Script aus über ein LogoControl-Attribut (Datentyp Word) in den VM der Logo schreiben. Dann hättest du das Attribut zum Einen in der Weboberfläche und zum Anderen sogar die Temperatur im Logo-Schaltprogramm zur Verfügung (für was auch immer das gut ist, vielleicht Rollo-Sonnenschutz wenn Außentemperatur um 10 Uhr größer 25°C ?!).

    Das Schreiben eines Attribut geht über einen einfachen HTTP-Get:
    http://logocontrol:8088/rest/devices/{deviceId}/attributes/{attributeId}/value?set={newValue}

    Mit Gain+Offset-Einstellung für das Attribut kannst du auch die Konvertierung vom Gleitkommawert in eine Ganzzahl durchführen.

    #2095
    lounsome
    Teilnehmer

    Das hört sich sehr gut an, könntest du mir das vielleicht noch ein bisschen genauer erklären?
    Was muss ich auf der LOGO-Seite einrichten?
    Meine Werte lege ich zur Zeit mittels Python-Script alle 10min. in eine .txt-Datei ab, wie muss ich
    diese abändern damit ich die Werte in die LOGO übertragen kann?

    Danke schon mal für die Hilfestellung.

    #2096
    Andycode
    Gast

    Ja das hört sich gut an einen 1Wire Sensor mit dem Raspberry auslesen
    und den Wert dann in der Logo auch noch Verwenden zu können 🙂

    Wer auch an einer Lösung Interessiert,
    nur Leider sind meine Kenntnisse nicht so gut das ich so ein Script Schreiben kann.

    #2097
    lounsome
    Teilnehmer

    Vor allem „günstiger“ als Analogeingangskarten und PT100 Fühler.
    Bei mir sind es sollte ich irgend wann mal fertig werden, so um die 35-40Stk.

    #2098
    Andycode
    Gast

    Aso ja vor allem günstige^^

    Darf ich erfahren was du damit machen willst also mit deinen 35-40 Fühler.

    Ich nutze Logocontrol auch dazu um meine Logo Ausgänge zu erweitern funktioniert prima 🙂

    #2099
    lounsome
    Teilnehmer

    Sämtliche Raumtemperaturen Keller bis OG (18 Räume) + Aussentemp. +
    Heizung + alle Rückläufe der FBH (wird dann warscheinlich die 40Stk. überschreiten)

    #2100
    admin
    Administrator

    Also im Logo-Schaltprogramm musst du nichts ändern, solange du den Wert nicht auch im Schaltprogramm verwenden willst. Du musst dir lediglich ein „word“ im Speicher des Logo-VM aussuchen, dass noch nicht verwendet wird. Analogwerte sind in der Logo vom Datentyp „word“, also 2 Bytes lang, wenn du dich somit z.B. für VB100 entscheidest sind sowohl das Byte 100 als auch Byte 101 belegt.

    In LogoControl legst du dir dafür ein Device mit einem Attribut an:

    <device id="1" name="Temperatur">
    	<attribute id="1" name="temp" address="100" datatype="word" offset="0" gain="0.1" />
    </device>

    Zu Beachten ist der Gain von 0.1. Ich gehe jetzt einfach mal davon aus, dass dir eine Nachkommastelle bei der Temperatur reicht. Die Logo kann nur Ganzzahlige Werte, daher muss LogoControl eine Temperatur von 22.4 zuerst in 224 konvertieren bevor es in den VM-Speicher geschrieben wird. Der Gain ist eigentlich für die Visualisierung von (ganzzahligen) Analogwerten aus der Logo gedacht und macht aus der (224 * gain) eben die 22.4. Beim Schreiben von Analogwerten in die Logo rechnet LogoControl aber den umgekehrten Weg, also (22.4 / gain).

    Durch einen einfachen HTTP-GET-Aufruf von
    http://logocontrol:8088/rest/devices/1/attributes/1/value?set=22.4
    schreibst du nun den Wert 22.4 in das oben definierte Attribut und damit auch an Adresse VB100 (und 101, da 2 Bytes lang) der Logo.

    Wie du den HTTP-GET nun in dein Python-Script einbaust, musst du selber schauen. Ich hatte bisher mit Python nichts zu tun. Hier evtl. ein Ansatzpunkt:
    http://stackoverflow.com/questions/645312/what-is-the-quickest-way-to-http-get-in-python

    Um nun die Temperatur auch im Logo-Schaltprogramm nutzen zu können musst du lediglich einen analogen Netzwerkeingang hinzufügen und dort die VM-Adresse 100 einstellen. Anschließend kannst du den Analogwert mit sämtlichen Analogbausteinen (Analogverstärker, Schwellwertschalter usw.) verschalten.

    #2101
    lounsome
    Teilnehmer

    Perfekt!
    Ich poste morgen mal mein Python-Script etc.

    Danke

    #2103
    Andycode
    Gast

    Ich hab es jetzt endlich geschafft ein Python Script zu Schreiben,
    Das das ermöglicht 🙂

    Wen man das Python Script aufruft wird der Sensor ausgelesen
    und Der Wert an Logocontrol gesendet.

    Hier mal der Code:

    import urllib
    # open the sensor log file as seen in the tutuorial (replacing 28-0000068aa433 with the number of your sensor)...
    tfile = open("/sys/bus/w1/devices/28-04146acb1aff/w1_slave")
    # read the data and close the file...
    text = tfile.read()
    tfile.close()
    # Split the data and extract the temperature value...
    temperature_data = text.split()[-1]
    temperature = float(temperature_data[2:])
    temperature = temperature / 1000
    url = ("http://logocontrol:8088/rest/devices/1/attributes/1/value?set=" + str(temperature) + "")
    content = urllib.urlopen(url).read()

    Ich führ dann die Python Datei alle 5 Sekunden automatisch aus und es läuft perfekt 😛

    #2121
    lounsome
    Teilnehmer

    Habs so ziemlich genau so gelöst.
    Noch eine doofe Frage: was muss ich in der Logo ändern damit der Befehl

    <attribute id="1" name="Status" address="200.0" datatype="bit">
    	<valuetext value="1" text="ein" />
    	<valuetext value="0" text="aus" />
    </attribute>
    

    ein oder aus meldet?
    Wie kann ich z.B. Ausgang Q7 and die Adresse 200.0 schicken?
    Ich krieg das irgendwie nicht gebacken.

    Hat sich erledigt, es gibt da eine Zuordnungstabelle:
    Tabelle

    • Diese Antwort wurde vor vor 9 Jahren, 4 Monaten von lounsome bearbeitet.
    • Diese Antwort wurde vor vor 9 Jahren, 4 Monaten von lounsome bearbeitet.
    • Diese Antwort wurde vor vor 9 Jahren, 4 Monaten von admin bearbeitet.
    • Diese Antwort wurde vor vor 9 Jahren, 4 Monaten von admin bearbeitet.
    #2130
    admin
    Administrator

    Jep, die Tabelle gibt es übrigens auch hier:
    Konfiguration (dort den Kasten „VM Adressen für Ein-/Ausgänge/Merker der LOGO 0baX“ aufklappen)

    Dein Q7 liegt also bei der 0ba7 auf 942.6 und bei der 0ba8 auf 1064.6

12 Beiträge anzeigen - 1 bis 12 (von insgesamt 12)
  • Du musst angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.