ja powiadomienie na telefon robię przez noda function, przez call service też mi nie chciało iść
wstaw function node a w call service pole “Data” pusto
msg.payload =
{
"data": {
"message": "TTS",
"data": {
"tts_text": msg.wiadomosc,
"media_stream": "alarm_stream"
}
}
}
return msg;
No dobra, ale jak wywołać do tej funkcji konkretne urządzenie? (notify.mobile_app_)
Hej
Zrobiłem w końcu status poranny i działa (głosowo OK). Mam jednak pytanie o prawidłowe nody w kwestii konfiguracji aby status był odczytywany konkretnie między 5.30 a 6.30 rano z konkretnym warunkiem: lampka musi być: ON, oraz czujnik ruchu musi wykrywać ruch, maksymalnie 1 powtórzenie. Niestety początkowy Inject node nie pozwala na ustawienie dowolnych godzin uruchomienia (tylko pełne godziny). Ciągle coś mi nie działa w tych ustawieniach…
do ograniczeń czasowych używam TimeRangeNode możesz co do minuty wstawić warunki,
do ograniczenia TYLKO RAZ DeleyNode ale z parametrem RateLimit
Nie działa, bo nie przesyłasz do nodu call service informacji w takiej formie w jakiej ich oczekuje.
W nodzie call service masz coś takiego z prawej strony u dołu jak Load example data
. Kliknij i sprawdź jaką formę musi mieć msg.payload dla google_say. Niżej w tabelce masz wszystkie właściwości jakie możesz przesłać.
nie rozumiem, dziwi mnie czemu orginalny przykład Artura nie działa.
A czy Twój flow wygląda tak jak ‘orginalny’ flow Artura?
Za nodem ‘function 1’ wstaw kolejny nod fuction zawierający:
msg.payload =
{
"data":
{
"message": msg.wiadomosc,
}
}
return msg;
W oryginalnym flow jest to ostatni nod function przed nodem call service ‘Głosnik Artura’.
Witam, napiszę do ekspertów, ponieważ z node red jestem noga.
[{"id":"377af94b9b8466e8","type":"api-call-service","z":"d615831f.f58e4","name":"Głośnik","server":"46d72cce.d68324","version":5,"debugenabled":false,"domain":"tts","service":"google_cloud_say","areaId":[],"deviceId":[],"entityId":["media_player.google_home_mini"],"data":"","dataType":"json","mergeContext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","output_location":"","output_location_type":"none","x":1440,"y":580,"wires":[[]]},{"id":"353576bd6bc3e4ff","type":"function","z":"d615831f.f58e4","name":"Pełna wiadomość","func":"msg.payload =\n{\n \"data\":\n {\n \"message\": msg.wiadomosc,\n }\n}\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1250,"y":580,"wires":[["377af94b9b8466e8"]]},{"id":"32be454e23a46fc7","type":"function","z":"d615831f.f58e4","name":"Temperatura","func":"msg.temperatura = Math.round(msg.airly_temp);\nmsg.wiadomosc = msg.wiadomosc+\n \"Temperatura wynosi \"+msg.temperatura+\" stopni celcjusza.\";\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":790,"y":580,"wires":[["4efec7bbf4fc1d17"]]},{"id":"d6d6d3710fbe1593","type":"api-current-state","z":"d615831f.f58e4","name":"Aktualna temperatura","server":"46d72cce.d68324","version":3,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","entity_id":"sensor.airly_temperatura","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"airly_temp","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":600,"y":580,"wires":[["32be454e23a46fc7"]]},{"id":"7ea660e15865de6c","type":"function","z":"d615831f.f58e4","name":"Aktualna data","func":"const teraz = new Date();\nconst dni_tygodnia = [\"niedziela\", \"poniedziałek\", \"wtorek\", \"środa\", \"czwartek\", \"piątek\", \"sobota\"];\n\nconst miesiace = [\"stycznia\",\"lutego\",\"marca\",\"kwietnia\",\"maja\",\"czerwca\",\"lipca\",\n \"sierpnia\",\"września\",\"października\",\"listopada\",\"grudnia\"];\n \nconst godziny = [\"północ\", \"pierwsza\",\"druga\",\"trzecia\", \"czwarta\",\"piąta\", \n \"szósta\", \"sidma\", \"ósma\", \"dziewiąta\", \"dziesiąta\", \"jedenasta\", \n \"dwunasta\", \"trzynasta\", \"czternasta\",\"piętnasta\", \"szesnasta\", \n \"siedemnasta\", \"osiemstansta\", \"dziewiętnasta\", \"dwudziesta\", \n \"dwudziestapierwsza\", \"dwudziestadruga\", \"dwudziestatrzecia\"];\n \nconst dzien_slow = [\"pierwszy\", \"drugi\",\"trzeci\", \"czwarty\", \"piąty\", \"szósty\", \n \"siódmy\", \"ósmy\", \"dziewiąty\", \"dziesiąty\", \"jedynasty\", \n \"dwunasty\", \"trzynasty\", \"czternasty\", \"piętnasty\", \"szesnasty\", \n \"siedemnasty\", \"osiemnasty\", \"dziewiętnasty\", \"dwudziesty\", \n \"dwudziestypierwszy\", \"dwudziestydrugi\", \"dwudziestytrzeci\", \n \"dwudziestyczwarty\", \"dwudzistypiąty\", \"dwudziestyszósty\", \n \"dwudziestysiódmy\", \"dwudziestyósmy\", \"dwudziestydziewiąty\", \n \"trzydziesty\", \"trzydziestypierwszy\"];\n\nmsg.akt_godzina = `${ godziny[teraz.getHours()] }`;\nmsg.minuty = teraz.getMinutes();\n\nmsg.dzien_tygodnia = `${ dni_tygodnia[teraz.getDay()] }`;\nmsg.dzien_miesiaca = `${ dzien_slow[teraz.getDate()] }`;\nmsg.miesiac = `${ miesiace[teraz.getMonth()] }`\n\nmsg.wiadomosc = \"Dzień dobry. Dzisiaj jest \"+msg.dzien_tygodnia+\" \"+msg.dzien_miesiaca+\" dzień \"+msg.miesiac+\". Godzina \"+msg.akt_godzina+\" \"+msg.minuty;\n\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":580,"wires":[["d6d6d3710fbe1593"]]},{"id":"89fea13242008e54","type":"inject","z":"d615831f.f58e4","name":"test","props":[],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","x":270,"y":520,"wires":[["7ea660e15865de6c"]]},{"id":"4efec7bbf4fc1d17","type":"api-current-state","z":"d615831f.f58e4","name":"Pada?","server":"46d72cce.d68324","version":3,"outputs":2,"halt_if":"on","halt_if_type":"str","halt_if_compare":"is","entity_id":"binary_sensor.czujnik_deszczu","state_type":"str","blockInputOverrides":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"entity"}],"for":0,"forType":"num","forUnits":"minutes","x":930,"y":580,"wires":[["a88c71d797f124a1"],["9a2f5c064bb73a9a"]]},{"id":"a88c71d797f124a1","type":"function","z":"d615831f.f58e4","name":"Pada","func":"msg.wiadomosc = msg.wiadomosc+\n \"Wykryto opady na zewnątrz. Dobrego dnia.\";\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1070,"y":540,"wires":[["353576bd6bc3e4ff"]]},{"id":"9a2f5c064bb73a9a","type":"function","z":"d615831f.f58e4","name":"Nie pada","func":"msg.wiadomosc = msg.wiadomosc+\n \"Dobrego dnia.\";\nreturn msg;","outputs":1,"timeout":"","noerr":0,"initialize":"","finalize":"","libs":[],"x":1080,"y":620,"wires":[["353576bd6bc3e4ff"]]},{"id":"46d72cce.d68324","type":"server","name":"Home Assistant","version":5,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":"30","areaSelector":"friendlyName","deviceSelector":"friendlyName","entitySelector":"friendlyName","statusSeparator":"at: ","statusYear":"hidden","statusMonth":"short","statusDay":"numeric","statusHourCycle":"h23","statusTimeFormat":"h:m","enableGlobalContextStore":true}]
Problem polega na tym, że źle odczytuje datę. Dzisiaj jest 24.09 a z głośnika leci 25 września. Jak to naprawić?
Cześć,
Głośnik źle czyta datę bo w przypadku funkcji getDate()
indeksowanie zaczyna się od ‘jedynki’ i zakres zwracanych wartości to 1 - 31, a Indeksowanie tablic (w tym Twojej dzien_slow) zaczyna się od 0.
Funkcja getDate()
pierwszego dnia miesiąca zwróci 1. W Twojej tablicy dzien_slow z indeksem 0 masz wartość ‘pierwszy’, z indeksem 1 jest ‘drugi’. Funcja getDate()
zwróci 1 i głośnik ‘wypluje’ “drugi” dzień miesiąca.
Musisz albo zmiejszyć pobieraną wartośc z getDate()
o jeden, albo na samym poczatku tablicy dzien_slow dodać jeszcze jedną dowolną wartość, która z indeksem 0 nigdy nie zostanie sprawdzona. W Twoim przypadku nigdy nie zostanie sprawdzona ‘pierwszy’.
W przypadku getMonth()
i Twojej tablicy ‘miesiące’ wszystko działa jak należy bo funkcja zwraca wartości od 0 - 11. Styczeń w tym wypadku zwróci 0
Cześć
Czy ktoś juz rozgryzał temat, z naszym statusem porannym i openweathermap api v3.0? Nie mogę tego uruchomić, a zdaje się ze API v3.0 jest płatne powyżej 1000 odpytań …
Jest płatne, ale to nie jest problem, bo można sobie zlimitować ilość zapytań na które zezwoli ich serwer, co gwarantuje brak obciążeń karty, czy tam innej podłączonej metody płatności.
Standardowo tam jest 2000 zapytań, czyli można sobie nabić rachunku 1.2 GBP (+VAT) dziennie.
W nowej wersji nie ma już encji sensor.openweathermap_forecast_condition (informację o nadchodzącej pogodzie) czy ktoś to może rozkminił czym to zastąpić?
Ja używam noda openweathermap oczywiście z blokadą do 1000 zapytań, dostajemy od razu całą prognozę z wszystkimi danymi. Trzeba to tylko ubrać w funkcje i tyle.
Jak pisali poprzednicy. API 3.0 z blokadą i robisz template. Encje są poza integracją openweathermap, ale nazwa zostaje taka jak była poprzednio
template:
- trigger:
- platform: time_pattern
minutes: /2
action:
- service: weather.get_forecasts
data:
type: daily
target:
entity_id: weather.openweathermap
response_variable: daily
sensor:
- name: OpenWeatherMap Forecast Cloud coverage
unique_id: openweathermap_forecast_cloud_coverage
state: "{{ daily['weather.home'].forecast[0].cloud_coverage }}"
unit_of_measurement: '%'
- name: OpenWeatherMap Forecast Condition
unique_id: openweathermap_forecast_condition
state: "{{ daily['weather.home'].forecast[0].condition }}"
- name: OpenWeatherMap Forecast Precipitation
unique_id: openweathermap_forecast_precipitation
state: "{{ daily['weather.home'].forecast[0].precipitation }}"
unit_of_measurement: mm
device_class: precipitation
- name: OpenWeatherMap Forecast Precipitation probability
unique_id: openweathermap_forecast_precipitation_probability
state: "{{ daily['weather.home'].forecast[0].precipitation_probability }}"
unit_of_measurement: '%'
- name: OpenWeatherMap Forecast Pressure
unique_id: openweathermap_forecast_pressure
state: "{{ daily['weather.home'].forecast[0].pressure }}"
unit_of_measurement: hPa
device_class: pressure
- name: OpenWeatherMap Forecast Temperature
unique_id: openweathermap_forecast_temperature
state: "{{ daily['weather.home'].forecast[0].temperature }}"
unit_of_measurement: °C
device_class: temperature
- name: OpenWeatherMap Forecast Temperature Low
unique_id: openweathermap_forecast_temperature_low
state: "{{ daily['weather.home'].forecast[0].templow }}"
unit_of_measurement: °C
device_class: temperature
- name: OpenWeatherMap Forecast Time
unique_id: openweathermap_forecast_time
state: "{{ daily['weather.home'].forecast[0].datetime }}"
device_class: timestamp
- name: OpenWeatherMap Forecast Wind bearing
unique_id: openweathermap_forecast_wind_bearing
state: "{{ daily['weather.home'].forecast[0].wind_bearing }}"
unit_of_measurement: °
- name: OpenWeatherMap Forecast Wind speed
unique_id: openweathermap_forecast_wind_speed
state: "{{ daily['weather.home'].forecast[0].wind_speed }}"
unit_of_measurement: m/s
device_class: wind_speed
Już ogarnąłem nodem openweathermap. Template pewnie też się przyda.
Dzięki wielkie panowie @ajakubek @rizydorczyk