Gå til innhold
  • Bli medlem
Støtt hjemmeautomasjon.no!

Badetemperaturer fra Badetassen inn i Domoticz?


Teknor

Anbefalte innlegg

Ikke så mye aktivitet her, men forsøker likevel….

 

Her har en flink person laget integrasjon mellom Badetassen og Homey. Mulig å gjøre det samme mot Domoticz for noen som kan denslags?

 

 https://homey.solweb.no/custom-integrations/badetemperatur

 

// Fetching temperature from Altibox API. Badetassen.
// For use with Athom Homey as a homeyscript.

const apiurl = 'https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location/'

async function getData() {
    let resp = await fetch(apiurl, {
        "headers": {
            "accept": "application/json",
            "content-type": "application/json",
            "Authorization": "Bearer 9df43895-3d09-30d5-afe4-db2bf92a86f0",
        },
        "method": "GET"
    });
    let data = await resp.json()

    let el = null
    for (let i = 0; i < data.length; i++) {
        if (data[i].Name === 'Sjøbadet') {
            el = data[i]
        }
    }

    return el
}

let r = await getData()
console.log("=== Results ===")
console.log(r)

if (r === null) return;

console.log("Tag " + "badetassen_" + r.id)
console.log({type: 'number', title:'Badetemp [' + r.Name + ']'})
console.log("Temperature: ", r.lastTemperature)

await setTagValue("badetemp_" + r.id, {type: 'number', title:'Badetemp [' + r.Name + ']'}, parseFloat(r.lastTemperature))


 

Endret av Teknor
Lenke til kommentar
Del på andre sider

  • 4 måneder senere...

Hei.

 

Her har du en kode i python som gjør samme greiene.

Du må opprette et dummypunkt i Domoticz, finne idx for dette punktet og endre det i linken under "idx= "

 

Scriptet kan ikke kjøres direkte i Domoticz, men i bakgrunnen.

 

Lag en ny fil og lim inn innholdet:

eks Badetemperatur.py

 

Kjøres slik i terminalen på RPI: python3 Badetemperatur.py &

import requests
import time

#Endre stedsnavnet her
Stedsnavn = "Osebakkenstranda"

def api_data():

        url = "https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location"

        headers = {
            'accept': 'application/json',
            'content-type': 'application/json',
            'Authorization': 'Bearer 9df43895-3d09-30d5-afe4-db2bf92a86f0'
        }

        try:
                response = requests.get(url, headers=headers)
                jsondata = response.json()
                lenght = len(jsondata)

                for i in range(lenght):
                        if Stedsnavn in jsondata[i]["Name"]:
                                temp = jsondata[i]["lastTemperature"]
                                print("Badetemperaturen for "+Stedsnavn+": "+temp+"°C")
                                #Endre idx=  med IDX for punktet
                                requests.post("http://127.0.0.1:8080/json.htm?type=command&param=udevice&idx=565&nvalue=0&svalue="+temp)

        except Exception as e:
                print("Feilmelding: "+str(e))

while True:
        api_data()
        #Polling er satt til 1 time
        time.sleep(3600)

 

 

Kjører du domoticz på en RPI, kan du få scriptet til å starte automatisk slik:

sudo nano /etc/rc.local

Legg linjen under i rc.local mellom fi og exit0 (endre stien hvis filen ikke er plassert i /home/pi mappen)

fi
(sleep 5;python3 /home/pi/Badetemperatur.py) &
exit 0

Restart etterpå.

 

 

  • Thanks 1
Lenke til kommentar
Del på andre sider

  • 3 måneder senere...

Laget like gjerne en plugin til domoticz ut av det.

 

Opprett en ny mappen under domoticz-->plugins som heter eks badetassen

Dermed, lagre innholdet i koden som "plugin.py", og legg filen i mappen

Restart domoticz

 


"""

Altibox badetassen API

Author: deve87, 2023

Version:    1.0: Initial Version

"""
"""

<plugin key="Badetassen" name="Altibox badetassen API" author="deve87" version="1.0" wikilink="" externallink="https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location">
    <params>
        <param field="Address" label="API URL" width="400px" required="true" default="https://prdl-apimgmt.lyse.no/apis/t/prod.altibox.lyse.no/temp/1.0/api/location"/>
        <param field="Mode1" label="Authorization" width="400px" required="true" default="Bearer 9df43895-3d09-30d5-afe4-db2bf92a86f0"/>
        <param field="Mode2" label="Place 1" width="400px" required="true" default="Osebakkenstranda"/>
        <param field="Mode3" label="Place 2" width="400px" required="false" default=""/>
        <param field="Mode4" label="Place 3" width="400px" required="false" default=""/>
        <param field="Mode5" label="Update every x minutes" width="200px" required="true" default="60"/>
        <param field="Mode6" label="Debug" width="75px">
            <options>
                <option label="False" value="Normal"  default="False" />
                <option label="True" value="Debug"/>
            </options>
        </param>
    </params>
</plugin>

"""

import Domoticz
import requests
import time
from datetime import datetime, timedelta

class BasePlugin:

    heartbeatsInterval = 10
    heartbeatsCount = 0

    def __init__(self):
        self.debug = False
        self.error = False
        self.nextpoll = datetime.now()
        self.pollinterval = 60
        return

    def onStart(self):

        Domoticz.Debug("onStart called")
        self.pollinterval = int(Parameters["Mode5"])*60

        if Parameters["Mode6"] == 'Debug':
            self.debug = True
            Domoticz.Debugging(1)
            DumpConfigToLog()
        else:
            Domoticz.Debugging(0)

        if len(Parameters["Mode2"]) > 0:
            if 1 not in Devices:
                Domoticz.Device(Name=Parameters["Mode2"], Unit=1, TypeName="Temperature", Used=1).Create()
                Domoticz.Log(Parameters["Mode2"]+" created")
        if len(Parameters["Mode3"]) > 0:
            if 2 not in Devices:
                Domoticz.Device(Name=Parameters["Mode3"], Unit=2, TypeName="Temperature", Used=1).Create()
                Domoticz.Log(Parameters["Mode3"]+" created")
        if len(Parameters["Mode4"]) > 0:
            if 3 not in Devices:
                Domoticz.Device(Name=Parameters["Mode4"], Unit=3, TypeName="Temperature", Used=1).Create()
                Domoticz.Log(Parameters["Mode4"]+" created")

        self.checkAPI()

        Domoticz.Heartbeat(self.heartbeatsInterval)

    def onStop(self):
        Domoticz.Log("Plugin is stopping.")
        Domoticz.Debugging(0)

    def onHeartbeat(self):
        Domoticz.Debug("onHeartbeat called")
        self.heartbeatsCount = self.heartbeatsCount + 1
        if self.pollinterval <= self.heartbeatsInterval * self.heartbeatsCount:
            self.heartbeatsCount = 0
            self.checkAPI()

    def checkAPI(self):

        try:
          url = Parameters["Address"]
          headers = {
              'accept': 'application/json',
              'content-type': 'application/json',
              'Authorization': Parameters["Mode1"]
          }

          response = requests.get(url, headers=headers)
          jsondata = response.json()
          lenght = len(jsondata)
          for i in range(lenght):
              if Parameters["Mode2"] in jsondata[i]["Name"]:
                  temp = jsondata[i]["lastTemperature"]
                  if 1 in Devices:
                      Devices[1].Update(nValue=1, sValue=temp)
              if Parameters["Mode3"] in jsondata[i]["Name"]:
                  temp = jsondata[i]["lastTemperature"]
                  if 2 in Devices:
                      Devices[2].Update(nValue=1, sValue=temp)
              if Parameters["Mode4"] in jsondata[i]["Name"]:
                  temp = jsondata[i]["lastTemperature"]
                  if 3 in Devices:
                      Devices[3].Update(nValue=1, sValue=temp)

        except Exception as e:
          Domoticz.Log("Error message: "+str(e))

global _plugin
_plugin = BasePlugin()

def onStart():
    global _plugin
    _plugin.onStart()

def onStop():
    global _plugin
    _plugin.onStop()

def onHeartbeat():
    global _plugin
    _plugin.onHeartbeat()


# Generic helper functions
def DumpConfigToLog():
    for x in Parameters:
        if Parameters[x] != "":
            Domoticz.Debug( "'" + x + "':'" + str(Parameters[x]) + "'")
    Domoticz.Debug("Device count: " + str(len(Devices)))
    for x in Devices:
        Domoticz.Debug("Device:           " + str(x) + " - " + str(Devices[x]))
        Domoticz.Debug("Device ID:       '" + str(Devices[x].ID) + "'")
        Domoticz.Debug("Device Name:     '" + Devices[x].Name + "'")
        Domoticz.Debug("Device nValue:    " + str(Devices[x].nValue))
        Domoticz.Debug("Device sValue:   '" + Devices[x].sValue + "'")
    return

 

Kun "Name" under "Product URL" linken vil fungere her. 

domo1.png.90b27da6bd280ab8d61f47d0757b27b2.png

 

domo2.thumb.png.78110ce5250d32d8f3807381feae9618.png

  • Thanks 1
Lenke til kommentar
Del på andre sider

Kjenner dessverre ikke til HA sitt opplegg.

 

Du kan muligens bruke det første skript og skrive til en HA dummy punkt via API'n demmes.

 

Skifte ut requests.post med HA sitt API opplegg, så burde det gå 👌

requests.post(
  • Like 1
Lenke til kommentar
Del på andre sider

Bli med i samtalen

Du kan publisere innhold nå og registrere deg senere. Hvis du har en konto, logg inn nå for å poste med kontoen din.

Gjest
Skriv svar til emnet...

×   Du har limt inn tekst med formatering.   Lim inn uten formatering i stedet

  Du kan kun bruke opp til 75 smilefjes.

×   Lenken din har blitt bygget inn på siden automatisk.   Vis som en ordinær lenke i stedet

×   Tidligere tekst har blitt gjenopprettet.   Tøm tekstverktøy

×   Du kan ikke lime inn bilder direkte. Last opp eller legg inn bilder fra URL.

×
×
  • Opprett ny...

Viktig informasjon

Vi har plassert informasjonskapsler/cookies på din enhet for å gjøre denne siden bedre. Du kan justere dine innstillinger for informasjonskapsler, ellers vil vi anta at dette er ok for deg.