Script für Accuweather

Einrichtung, Anschluss und Programmierung der HomeMatic CCU

Moderator: Co-Administratoren

Benutzeravatar
Yosh
Beiträge: 90
Registriert: 24.07.2021, 23:30
System: CCU
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Script für Accuweather

Beitrag von Yosh » 11.01.2022, 21:21

sebastianoh hat geschrieben:
11.01.2022, 21:00
Ja einmal werden laut URL die aktuellen Werte currently und mit der anderen URL der forecast abgerufen. Brauche ich nicht beide Abrufe für meine angegebenen Variablen?
Das habe ich mir jetzt im einzelnen nicht angeschaut. Manche Werte sind nicht in allen Antworten, von daher kann es Sinn machen.

Wichtig ist halt, dass Du das Programm nicht irgendwie sonst durch einen Trigger auslöst, sei es über eine Visualisierung oder über die GUI. Oder mit dem API Key direkt auf der Accuweather Seite. Als ich mir seinerzeit auf Basis von Michael's Vorlage meine Skripte zusammengebaut hatte, war ich auch gerne mal über der 50'er Grenze. Versuch doch einfach mal 24h keine Anfrage zu senden und dann frisch um 0:00 zu starten.

Die 50 beziehen sich auf das Aufrufen der AccuWeather API, egal ob Du die "Täglich", "Aktuell", oder Vorhersage-URL aufrufst. Die Anzahl der Werte in der jeweiligen Antwort sind egal. Jedes Mal wenn Du Dein Programm laufen lässt, "verbrätst" Du 2 Aufrufe von den 50, was, wenn Du es stündlich 24/7 tätest nicht weiter schlimm wäre denn das wären 48 Aufrufe und damit unter 50. Rufst Du es aber einmal "außer der Reihe" auf, sind die 50 damit voll.
Umgebung: CCU3 (FW 3.69.7) / FB 7590 / Hue Bridge mit 17 Lampen (Hue, TRÅDFRI, Osram) / 6x Amazon Echo
Geräte: 505 Kanäle in 83 Geräten // 42 Kanäle in 6 Heizgruppen // 140 CUxD-Kanäle in 20 CUxD-Geräten
Addons: NEO Server 2.12.2 / CUx-Daemon 2.10.1 / CUxD-Highcharts 1.4.5 / Programme drucken 2.6 / HM Pdetect 1.15 / Philips Hue 3.2.5 / HQ WebUI 2.5.9
API Keys: Google (Script , Maps, Calendar) / AccuWeather / Tankerkönig / PushOver
Sonstige: SDV v4.09.04G / AIO Creator NEO v3.0.3 mit 2x Samsung S20FE und 1x Tab A6 / Mediola Cloud / Alexa.sh

MichaelN
Beiträge: 9799
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 711 Mal
Danksagung erhalten: 1655 Mal

Re: Script für Accuweather

Beitrag von MichaelN » 11.01.2022, 22:17

Braucht man die Daten stündlich? Zur Haus Steuerung brauche ich nur einen Abruf alle 12 Stunden. Und zur Information brauche ich die Daten nur im Zeitraum 8-23 Uhr. Smart sollte nicht nur das home sein :wink:
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Yosh
Beiträge: 90
Registriert: 24.07.2021, 23:30
System: CCU
Hat sich bedankt: 21 Mal
Danksagung erhalten: 11 Mal

Re: Script für Accuweather

Beitrag von Yosh » 11.01.2022, 22:36

MichaelN hat geschrieben:
11.01.2022, 22:17
Braucht man die Daten stündlich? Zur Haus Steuerung brauche ich nur einen Abruf alle 12 Stunden. Und zur Information brauche ich die Daten nur im Zeitraum 8-23 Uhr. Smart sollte nicht nur das home sein :wink:
Touché :-D

Ich erspare mir jetzt den Hinweis, dass ich Nachteule bin und der Zeitraum ein anderer wäre und man eigentlich noch eine Anwesenheitserkennung als Bedingung für die Abfragen einbauen könnte, dass der HmIP-STHO mit den Defaulteinstellungen alle 3 Minuten die tatsächlich gemessene Temperatur sendet und das analoge Außenthermometer direkt daneben diese auch ohne NEO visualisiert oder dass, wenn der Blick nach draußen eine weiße Landschaft offenbart, eine Badehose (außer für Finnen) wohl das falsche Beinkleid wäre, etc. pp. ;-)
Umgebung: CCU3 (FW 3.69.7) / FB 7590 / Hue Bridge mit 17 Lampen (Hue, TRÅDFRI, Osram) / 6x Amazon Echo
Geräte: 505 Kanäle in 83 Geräten // 42 Kanäle in 6 Heizgruppen // 140 CUxD-Kanäle in 20 CUxD-Geräten
Addons: NEO Server 2.12.2 / CUx-Daemon 2.10.1 / CUxD-Highcharts 1.4.5 / Programme drucken 2.6 / HM Pdetect 1.15 / Philips Hue 3.2.5 / HQ WebUI 2.5.9
API Keys: Google (Script , Maps, Calendar) / AccuWeather / Tankerkönig / PushOver
Sonstige: SDV v4.09.04G / AIO Creator NEO v3.0.3 mit 2x Samsung S20FE und 1x Tab A6 / Mediola Cloud / Alexa.sh

herbylfs
Beiträge: 50
Registriert: 07.04.2018, 16:59
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Script für Accuweather

Beitrag von herbylfs » 20.05.2024, 11:57

Hallo,
mit welchen Hexenwerk bekommt man denn den Luftdrucktrend angezeigt???


Daten Medebach
UVIndex 4
UVIndexText "Mittel"
Pressure
Metric
Value 1007
Unit "mb"
UnitType 14
Imperial
Value 29.74
Unit "inHg"
UnitType 12
PressureTendency
LocalizedText "Steigend"
Code "R"
MobileLink "http://www.accuweather.com/de/de/medeba ... her/174583"
Link "http://www.accuweather.com/de/de/medeba ... her/174583"



Aus Script
!Hier die WETTERSTATION-ID und API-KEY eintragen
string wetterstation_id = "174583";
string api_key = "XXXXXXXXXXXXXXXXXXX";
string lScriptName="Wetterdaten Abholen mit WetterAccu.com";

var url = "http://dataservice.accuweather.com/curr ... tails=true";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
var UVIndex = (responce.StrValueByIndex("UVIndex",1)).StrValueByIndex(":",1).ToFloat();
var UVIndexText = (responce.StrValueByIndex("UVIndexText",1)).StrValueByIndex(":",1).ToLatin().Replace("\"","");
var Pressure = (responce.StrValueByIndex("Pressure",1)).StrValueByIndex(":",3).ToFloat();
var PressureTendency = (responce.StrValueByIndex("PressureTendency",1)).StrValueByIndex(":",1).ToLatin().Replace("\"","");


svName = "W_UV Index";
svObj = dom.GetObject(svName);
if (svObj){
svObj.State(UVIndex);
}
svName = "W_UV Intensität";
svObj = dom.GetObject(svName);
if (svObj){
svObj.State(UVIndexText);
}

svName = "Luftdruck";
svObj = dom.GetObject(svName);
if (svObj){
svObj.State(Pressure);
}
svName = "W_Luftdrucktrend";
svObj = dom.GetObject(svName);
if (svObj){
svObj.State(PressureTendency);
}

mfg
Wo kämen wir denn hin, wenn alle sagten "Wo kämen wir denn hin" und niemand ginge um zu sehen, wohin wir kämen, wenn wir gingen!?!
Ich hab so Hunger, dass ich vor lauter Durst gar nicht weiß was ich rauchen soll, so müde bin ich!!!
Spezialisten wissen immer mehr über immer weniger, bis Sie alles über nichts wissen.
Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher.

Bembi
Beiträge: 148
Registriert: 04.02.2015, 02:15
System: CCU und Access Point
Wohnort: Bochum
Hat sich bedankt: 10 Mal
Danksagung erhalten: 20 Mal

Re: Script für Accuweather

Beitrag von Bembi » 21.05.2024, 13:39

Moin,

Wenn Du keine Rückmeldung mehr bekommst...
Gibt die URL doch mal direkt im Browser ein, da solltest Du dann sehen, was zurück kommt. Ggf. eine Fehlermeldung.
1 x CCU3 mit aktuell 37 Geräten und 343 Kanälen (HM, HmIP, HmIPW)
1 x CCU3 mit aktuell 65 Geräten und 605 Kanälen (HM, HmIP, HmIPW)
2 x CCU2 und einen Schrank voll mit Restbeständen
13,5 KWp auf dem Dach mit Solaredge WR, Waterkotte WP

Fonzo
Beiträge: 6847
Registriert: 22.05.2012, 08:40
System: CCU
Hat sich bedankt: 25 Mal
Danksagung erhalten: 499 Mal

Re: Script für Accuweather

Beitrag von Fonzo » 21.05.2024, 15:08

herbylfs hat geschrieben:
20.05.2024, 11:57
mit welchen Hexenwerk bekommt man denn den Luftdrucktrend angezeigt???
Steht doch in der AccuWeather Current Conditions Dokumentation.

PressureTendency.LocalizedText string Description of the pressure tendency in the language specified by language code in the URL.
PressureTendency.Code string Pressure tendency code regardless of language. (F=falling, S=steady, R=rising)

Ich bekomme da auch auf der HmIP-CCU3 im NEO Server eine Rückmeldung von der Luftdrucktendenz von der AccuWeather API ausgegeben:

Code: Alles auswählen

const http = require('http');
const https = require('https');

const apiKey = 'ABCDEFG';
const locationKey = 'XXXXX';

function fetchData(url) {
    return new Promise((resolve, reject) => {
        const client = url.startsWith('https') ? https : http;
        client.get(url, (response) => {
            let data = '';

            // Ein Chunk Daten wurde erhalten.
            response.on('data', (chunk) => {
                data += chunk;
            });

            // Die gesamte Antwort wurde erhalten.
            response.on('end', () => {
                if (response.statusCode === 200) {
                    resolve(data);
                } else {
                    reject(new Error(`HTTP Error: ${response.statusCode}`));
                }
            });
        }).on('error', (err) => {
            reject(new Error(`Request Error: ${err.message}`));
        });
    });
}

(async () => {
    try {
        // Aktuelle Wetterbedingungen abrufen
        const currentConditionsUrl = `https://dataservice.accuweather.com/currentconditions/v1/${locationKey}?apikey=${apiKey}&details=true`;
        const currentConditionsResponse = await fetchData(currentConditionsUrl);
        const currentConditionsData = JSON.parse(currentConditionsResponse);

        // Luftdruck und Pressure Tendency aus den aktuellen Bedingungen auslesen
        currentConditionsData.forEach(condition => {
            const dateTime = condition.LocalObservationDateTime;
            if (condition.Pressure) {
                const pressure = condition.Pressure.Metric.Value;
                const pressureUnit = condition.Pressure.Metric.Unit;
                const pressureTendencyText = condition.PressureTendency?.LocalizedText || 'Keine Daten verfügbar';
                const pressureTendencyCode = condition.PressureTendency?.Code || 'Keine Daten verfügbar';
                console.log(`Datum/Zeit: ${dateTime}, Luftdruck: ${pressure} ${pressureUnit}, Tendenz: ${pressureTendencyText} (${pressureTendencyCode})`);
            } else {
                console.log(`Datum/Zeit: ${dateTime}, Luftdruck: Keine Daten verfügbar`);
            }
        });
    } catch (error) {
        console.error('Fehler:', error.message);
    }
})();

Das Problem liegt also nicht an der API von AccuWeather sondern irgendwo in Deinem benutzten Code.

Aber so ganz verstehe ich Dein Problem nicht, Du bekommst es doch offensichtlich angezeigt, zumindest hast Du das gepostet. Wo ist also das Problem?
herbylfs hat geschrieben:
20.05.2024, 11:57
PressureTendency
LocalizedText "Steigend"
Code "R"

Benutzeravatar
Black
Beiträge: 5547
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 434 Mal
Danksagung erhalten: 1095 Mal
Kontaktdaten:

Re: Script für Accuweather

Beitrag von Black » 21.05.2024, 16:39

Füge mal bitte zwischen hier folgendes Writeline ein und poste mal die Ausgabe in code Tags wenn das Script manuell ausführst.

Code: Alles auswählen

string responce = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

WriteLine (response);

var UVIndex =
Für das bisschen stringhandling braucht die ccu mal definitiv keine Hilfestellung.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

Zurück zu „HomeMatic Zentrale (CCU / CCU2 / CCU3 / Charly)“