Teknor Skrevet 24. juli 2022 Skrevet 24. juli 2022 (endret) 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 25. juli 2022 av Teknor Siter
deve87 Skrevet 28. november 2022 Skrevet 28. november 2022 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¶m=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å. 1 Siter
Teknor Skrevet 28. november 2022 Forfatter Skrevet 28. november 2022 (endret) Nydelig. Takk! Da har jeg litt å se på frem til våren. Bra ikke Domoticz-miljøet er helt dødt. Endret 28. november 2022 av Teknor Siter
deve87 Skrevet 12. mars 2023 Skrevet 12. mars 2023 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. 1 Siter
Teknor Skrevet 12. mars 2023 Forfatter Skrevet 12. mars 2023 Supert @deve87 ! En smal sak å konvertere denne til HomeAssistant også? Jeg er i ferd med å konvertere fra Domoticz i disse dager. Siter
deve87 Skrevet 12. mars 2023 Skrevet 12. mars 2023 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( 1 Siter
Anbefalte innlegg
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.